Cronjob 没有 运行 Python 脚本,即使它具有执行权限和指向 python 完整路径的 hashbang。在 cronjob 之外正常工作

Cronjob doesn't run Python script even though it has execute permissions and a hashbang to full path of python. Works normally outside of the cronjob

我的 crons 工作正常,我用简单的文件输出和 bash 脚本对其进行了测试,但是在执行我的 python 脚本时,我尝试的任何方法都不起作用。

这就是我所做的。

像往常一样,我在我的脚本中添加了一个 shebang

#! /usr/bin/python3.5

&

chmod +x myPythonScript.py

我将它添加到 crontab -e 并以各种方式进行了测试。

示例:

* * * * * /path/to/myPythonScript.py

为了确保我什至做了以下事情

* * * * * python /path/to/myPythonScript.py

* * * * * python3.5 /path/to/myPythonScript.py

* * * * * /usb/bin/python /path/to/myPythonScript.py

* * * * * /usb/bin/python3.5 /path/to/myPythonScript.py

甚至做了 */1 * * * * 和其他时间测试。

没有任何效果,如果我将所有这些都写在 cron 之外,那么每次都一切正常。我什至更改了 crontab -e 中的 SHELL 知道它不会有任何区别,但只是为了确定,将脚本粘贴到 /etc/cron.hourly,不,尝试使用 /usr/bin/env python 而不是通常的 shebang,尝试了所有其他愚蠢的事情,但没有成功。

当 运行 一个 bash 脚本时,Cronjobs 工作完美,我什至 运行 一个 bash 脚本来检查我的 python 脚本是否启动并且 运行 并在文本日志中通知我,如果没有,重新启动它并通知我,我的文本日志充满了重新启动,那是因为它从来没有 运行 python 脚本,所以 cron 显然在工作,因为它 运行 bash 脚本。

当 运行 cron 时,您应该始终将标准 out/err 写入文件以查看发生了什么。不要信任邮件,因为您的邮件服务器 may/maynot 正在设置。

所以,试试这个

* * * * * python /path/to/myPythonScript.py 1>/tmp/myPythonScript.out 2>/tmp/myPythonScript.err

1 分钟后检查文件 /tmp/myPythonScript.{out,err} 是否存在。这将使您对正在发生的事情有一个明确的方向。

再次强调,始终写下您的标准 out/err