发布
社区首页 >问答首页 >Cron总是失败,手动执行总是成功的。多么?

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

Stack Overflow用户
提问于 2022-08-04 16: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 18:51:28

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

票数 0
EN

Stack Overflow用户

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

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

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

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

https://stackoverflow.com/questions/73239623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档