Cronjob 停止运行

Cronjob 停止运行

我正在 Linux VM 上工作,每天晚上 11:35 运行一个 cron 作业,运行一个调用 API 并将数据导出到 Google Cloud Storage 的 python 脚本。

我每天 11:35 都会在我的 Google 存储桶中进行每日导出,例如 2 月 10 日晚上 11:35 导出的以下文件 当我 crontab -l在虚拟机上输入内容时,我得到的是:

35 22 * * * /home/worker/xxxx/yyyy/launch.sh

启动.sh

#!/bin/bash

BASE_PROJECT="/home/worker/xxxx/yyyy"

export PYTHONPATH="${BASE_PROJECT}"
export GOOGLE_USER_CREDENTIALS="${BASE_PROJECT}/credentials_red.json"
export PIPENV_PIPFILE="${BASE_PROJECT}/ingestion/Pipfile"

pipenv run python "${BASE_PROJECT}/ingestion/main.py"

GCS 上的文件:

在此输入图像描述 问题

从 12 月到 2 月 14 日,我的文件每天在 11:35 导出,此后,有 0 个文件导出到 Google Cloud Storage。我在ingestion/main.py2 月 14 日做了一些更改,这可能是原因,但如果可能的话,我想知道问题是什么。我今天做的第一件事就是恢复ingestion/main.py2 月 14 日以后的版本。我还做了什么:

  1. ingestion/main.py脚本正在调用外部 API。今天,我确实使用存储在虚拟机上的凭据从桌面调用了相同的 API,以查看问题是否与凭据有关。这不是问题,因为我能够取回数据。

  2. 之后,我决定launch.sh直接从我的虚拟机运行它,它实际上工作了,因为我的所有文件都导入到 Google Cloud Storage 上(我已经恢复了ingestion/main.py运行它时的旧版本。

我仍然不确定是什么原因导致了这个问题,我运行了sudo grep CRON var/log/syslog但只有几行。有没有办法获得有关为什么我的 cronjob 没有运行的更多信息?

答案1

输出(正常或错误)(如果有)通过邮件发送给运行脚本的 Linux 用户。

如果您的虚拟机未配置为广泛发送邮件,或者您没有设置.forward将邮件从 Linux 中继到互联网,则邮件可能仍然存在,请尝试mail从命令行。

如果您喜欢自行发送垃圾邮件,只需添加

[email protected]

作为 crontab 的第一行。

答案2

更改您crontab重定向脚本的任何输出到您的主目录中的日志文件(或其他位置,如果您有权限并希望这样做)。由于您的cron工作正在运行非交互式外壳stdin然后stdout转到“位存储桶”( /dev/null) - 如果出现错误,这将没有帮助。

尝试这个修改后的crontab条目:

35 22 * * * /home/worker/xxxx/yyyy/launch.sh >> /home/worker/cronlog.txt 2>&1

相关内容