Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Cron总是失败,手动执行总是成功的。多么?

Cron总是失败,手动执行总是成功的。多么?
EN

Stack Overflow用户
提问于 2022-08-04 08:50:09
回答 2查看 69关注 0票数 0

我有一份工作,每晚运行计算,并将结果存储在sqlite文件、google存储中。当我手动运行时,计划的任务总是成功的。当cron ()运行它时,它总是失败。日志没有给出有意义的错误消息。502错误码。启动一个不重要的新实例。我将cron.yaml设置为重试2次。但所有的处决都失败了。

我的cron.yaml

代码语言:javascript
代码运行次数:0
复制
- description: "PAPER GO calc from alpaca to /tmp/entries.sqlite"
  target: default
  url: /calcentriesindb
  schedule: every sun,mon,tue,wed,thu  20:00
  timezone: America/New_York
  retry_parameters:
    job_retry_limit: 2
    min_backoff_seconds: 30

最上面的日志条目是手动执行。下面三个是cron的尝试。

从502错误中完成日志条目

代码语言:javascript
代码运行次数:0
复制
{
  "protoPayload": {
    "@type": "type.googleapis.com/google.appengine.logging.v1.RequestLog",
    "appId": "s~wc2022-356423",
    "versionId": "20220730t143529",
    "requestId": "62eb0c5d00ff0bb76d8eabcbfc0001737e7763323032322d3335363432330001323032323037333074313433353239000100",
    "ip": "0.1.0.2",
    "startTime": "2022-08-04T00:01:33.767986Z",
    "endTime": "2022-08-04T00:01:34.565759Z",
    "latency": "0.797773s",
    "method": "GET",
    "resource": "/calcentriesindb",
    "httpVersion": "HTTP/1.1",
    "status": 502,
    "responseSize": "288",
    "userAgent": "AppEngine-Google; (+http://code.google.com/appengine)",
    "urlMapEntry": "auto",
    "host": "default.wc2022-356423.uc.r.appspot.com",
    "cost": 3.2186e-8,
    "taskQueueName": "__cron",
    "taskName": "05697141537686660811",
    "wasLoadingRequest": true,
    "instanceIndex": -1,
    "finished": true,
    "instanceId": "00c61b117c3c5fa64d13a841d4e8db781b8d5f07b01c3875537cbb754a073373efdb153e58e5d70a725960c452ea04b253df39c0c286628e0dec6d",
    "line": [
      {
        "time": "2022-08-04T00:01:34.565621Z",
        "severity": "INFO",
        "logMessage": "This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application."
      }
    ],
    "appEngineRelease": "1.9.71",
    "traceId": "115ab8ca6be26417bc63bb90824dbd71",
    "first": true,
    "traceSampled": true,
    "spanId": "1960824541831512114"
  },
  "insertId": "62eb0c5e0008a2c1355ad083",
  "httpRequest": {
    "status": 502
  },
  "resource": {
    "type": "gae_app",
    "labels": {
      "project_id": "wc2022-356423",
      "zone": "us16",
      "module_id": "default",
      "version_id": "20220730t143529"
    }
  },
  "timestamp": "2022-08-04T00:01:33.767986Z",
  "severity": "INFO",
  "labels": {
    "clone_id": "00c61b117c3c5fa64d13a841d4e8db781b8d5f07b01c3875537cbb754a073373efdb153e58e5d70a725960c452ea04b253df39c0c286628e0dec6d"
  },
  "logName": "projects/wc2022-356423/logs/appengine.googleapis.com%2Frequest_log",
  "operation": {
    "id": "62eb0c5d00ff0bb76d8eabcbfc0001737e7763323032322d3335363432330001323032323037333074313433353239000100",
    "producer": "appengine.googleapis.com/request_id",
    "first": true,
    "last": true
  },
  "trace": "projects/wc2022-356423/traces/115ab8ca6be26417bc63bb90824dbd71",
  "receiveTimestamp": "2022-08-04T00:01:34.572846740Z",
  "spanId": "1960824541831512114",
  "traceSampled": true
}

从处理程序调用的关键函数:

代码语言:javascript
代码运行次数:0
复制
func CalcEntriesInDb() (interface{}, error) {
    symbols, err := getTradableSymbols()
    if err != nil {
        log.Fatal("getTradableSymbols failed.", err)
    }

    log.Println(len(symbols), "symbols to scan.")
    createPath(c.EntryDbPath) // forces a specific path to exist including creation of folders.
    runList := GetRunList(c.RefDbPath)
    ////loadHistory because of weekends and holidays lets gather more than 13 days to get enough trail for minlow
    rowcount, err := loadHistory(20, symbols, c.EntryDbPath)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(`Running `, len(runList), `sql scripts.`)
    runSqlScripts(runList, c.EntryDbPath)

    err = gcsUp(c.EntryDbPath)
    sendEmail("Entries Calculated", PrintTableHTML(c.EntryDbPath, "entry"), c.EntryDbPath)

    return rowcount, err
}

这是我的indexHandler的节选

代码语言:javascript
代码运行次数:0
复制
func indexHandler(w http.ResponseWriter, r *http.Request) {
    spew.Dump(r.URL.Query())
    params := r.URL.Query()
    var apikey string
    log.Println("X-Appengine-Cron", r.Header["X-Appengine-Cron"])
    //log.Println(params["marina"])
    if len(params["marina"]) == 1 {
        apikey = params["marina"][0]
    }

    if len(r.Header["X-Appengine-Cron"]) > 0 || apikey == c.Apikey {
        log.Println("Key or Param passed.")
    } else {
        http.NotFound(w, r)
        return
    }
    //spew.Dump(r.URL.Path)
    switch r.URL.Path {
    case "/calcentriesindb":
        resp, err := CalcEntriesInDb()
        if err != nil {
            _, err = fmt.Fprint(w, err)
        } else {
            _, err = spew.Fprint(w, resp)
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-11 10:51:28

我终于开始工作了。我创建了一个cron条目,其中包括每个the。这是一种解决办法,不是解决办法。我没有调度/calcentriesindb,而是调度了/calcentriesindb?marina=apikey。我编写代码是为了在从应用程序引擎cron执行时不需要api键。哦,好吧。应用程序引擎处理调度请求的方式仍然存在一些问题。另外,如果您没有在其他评论中看到--使用curl调度来自完全不同服务器的请求,效果非常完美。

票数 0
EN

Stack Overflow用户

发布于 2022-08-04 09:48:39

我以前也有类似的问题,但是我想不起来状态码是502了。过去对我来说发生的是-当我通过Cron运行一个作业时,它会报告一个“失败”状态,但是如果我手动调用该作业,它就会成功完成。

我后来发现问题是- cron作业意味着返回200-299之间的状态(参见文档)。由cron作业调用的路由向队列中添加了一个任务,然后重定向到我的主页(这意味着它将返回301)。我将其更改为返回一个固定文本(例如“已完成”),这是一个200状态,解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73239623

复制
相关文章
在 Mac 上安装 Git ,生成 SSH 密钥用于 GitHub 授权
我们需要的 SSH 公钥存储在以.pub结尾的文件中,即: ~/.ssh/id_rsa.pub
圆号本昊
2021/09/24
2.3K0
在 Mac 上安装 Git ,生成 SSH 密钥用于 GitHub 授权
openssl RSA 内存读取密钥
用户3519280
2023/07/06
3640
mac环境下java、maven、git、rsa等配置
在终端下输入:open .bash_profile 命令,会打开此文件(如果没有则手动创建),添加如下内容。
saintyyu
2022/03/11
1K0
在GitLab CI / CD上使用SSH密钥
GitLab当前不支持在构建环境(运行GitLab Runner的环境)中管理SSH密钥的内置支持。
拿我格子衫来
2022/01/24
2.6K0
当一盆植物在MIT成了精,不,它只是成了机器人
这些伶俐的反应,被MIT和Parsons设计学院的研究人员地利用起来,才有了机器人 x 植物这样优雅的存在。
量子位
2018/12/25
6180
phabricator在mac上的搭建
前提:phabricator主要是由php写的,而且是以website方式运行的,所以mac上要先安装好 php + nginx(或apache) + mysql(很多配置会保存在数据库里)
菩提树下的杨过
2018/09/20
1.8K0
phabricator在mac上的搭建
Mac系统Git生成ssh公钥 原
        在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下:
珲少
2018/08/16
1.2K0
Mac系统Git生成ssh公钥
                                                                            原
证书,密钥,加密,rsa到底是啥?
证书也叫CA(Certification Authority)证书;密钥就是用来加解密用的文件或者字符串;rsa即非对称加密算法。
老高的技术博客
2022/12/28
4K1
证书,密钥,加密,rsa到底是啥?
macOS 使用 SSH 连接服务器
输入连接命令,回车,再输入连接命令中使用的用户密码即可连接上服务器。下面是连接命令:
很酷的站长
2022/12/05
4.4K0
macOS 使用 SSH 连接服务器
Mac 生成 SSH 密钥
昨天试用 cursor 时想推送代码到 github ,遇到问题,该用 ssh 方式推送,提示没有配置公钥。
明明如月学长
2023/04/11
2.9K0
Mac 生成 SSH 密钥
给你的 Git commit 加上绿勾
今天无事翻看了几个Python开发者的Github,却发现大多数人的Git commit列表都是白茫茫一片。
岂不美哉Frost
2019/11/29
2K0
xcode集成git
转自:http://my.oschina.net/zxs/blog/142544 Xcode 已经集成了git,建立新项目时钩选使用git,然后按照下面步骤让Xcode和git@osc 建立连接。
forrestlin
2022/04/02
5400
4.3 服务器上的 Git - 生成 SSH 公钥
如前所述,许多 Git 服务器都使用 SSH 公钥进行认证。 为了向 Git 服务器提供 SSH 公钥,如果某系统用户尚未拥有密钥,必须事先为其生成一份。 这个过程在所有操作系统上都是相似的。 首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥:
shaonbean
2019/05/26
1.3K0
在Mac上安装MySQL
1、打开mysql官网:https://www.mysql.com/,选择DOWNLOADS下面的MySQL Community (GPL) Downloads »
新人小试
2020/03/30
8.5K0
在Mac上安装MySQL
在Mac上安装redis
注:在redis3.2之后,redis增加了protected-mode,在这个模式下,即使注释掉了bind 127.0.0.1,再访问redisd时候还是报错,需要把protected-mode yes改为protected-mode no
新人小试
2020/03/30
8K0
在Mac上安装DNSmasq
首先你的 Mac 电脑需要安装了 Hombrew,安装链接:Install Homebrew
零云
2023/07/24
1.4K0
git如何使用ssh密钥
首先先来了解一下git的四种传输协议:本地、ssh、git和http,http协议应该说是最常见的一种,因为简单,以下是各个协议的优点与缺点:
benny
2018/12/29
2.6K0
配置多个git账号的ssh密钥
我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目。出于各种原因,自己的 github 项目无法使用公司的 git 账号,于是我们可以为自己的 github 创建一个新的 git 账号,这就需要生成新的 ssh 密钥。 下面总结了创建多个互相独立的 ssh 密钥的步骤(以公司的和自己 github 的为例)。
xiaoxi666
2018/12/13
2.2K0
RSA密钥长度、明文长度和密文长度
本文介绍RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,天缘以后还会补充几篇RSA基础知识专题文章,用最简单最通俗的语言描述RSA,让各位了解RSA算法本身其实也很简单,RSA的复杂度是因为数学家把效率和安全也考虑进去的缘故。
竹清
2018/08/31
22.4K0
GitHub基本使用介绍
之前公司项目一直在使用SVN作为项目代码版本控制,最近我想整理下项目中iOS端CC视频SDK封装,CC移动端SDK本身只提供视频播放信息以及播放器初始化,因此需要自定义播放器的控制逻辑。当整理好了代码准备分享时,发现还是Git才是版本控制的王道。
我只不过是出来写写代码
2019/04/02
1.1K0
GitHub基本使用介绍

相似问题

将字典列表作为字典的键的值

233

使用值列表作为键将字典转换为嵌套字典

112

使用列表值作为后续键访问字典值

20

将列表值用作字典键作为键值

22

С将列表值作为键和值转换到字典

215
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档