【发布时间】:2013-09-02 00:59:34
【问题描述】:
Python crontab 脚本似乎不起作用。当我手动运行它时,
python /home/ec2-user/code1.py
它工作正常,但是当放入 crontab 的 cron.txt 文件时,就不行了。
我的 crontab 文件是:
@hourly python /home/ec2-user/code1.py >/dev/null 2>&1
我也试过
0 * * * * python /home/ec2-user/code1.py >/dev/null 2>&1
但两人都没有多少运气。
sudo crontab -l
@hourly python /home/ec2-user/code1.py >/dev/null 2>&1
显示所有功能。 我尝试了Crontab not running my python script 和其他几个运气不佳的人。
编辑:
与
PATH=/opt/python2.7/bin
MAILTO=my@email
*/5 * * * * /home/ec2-user/code1.py
我收到的电子邮件是:
/bin/sh: /home/ec2-user/code1.py : No such file or directory
但我可以打开和编辑文件没问题。我尝试了很多不同的东西,但归结为:cron 看不到文件。
感觉就像我经历了整个https://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work 还是没有运气
【问题讨论】:
-
检查
cron是否实际运行 - 它可能不够充分但关闭 VM 映像。 -
忽略重定向到
/dev/null并查看您收到的电子邮件:cron会将 stdout/stderr 发送给所有者(在本例中为 root)。在crontab条目中使用完整路径/usr/bin/python通常是一个好主意,因为您无法确定PATH是什么。 -
@rodling:啊哈!您的问题很可能是
cron找不到您的python解释器。cron的默认路径通常只是/usr/bin:/bin,因此一种替代方法是将PATH=/opt/python2.7/bin添加到crontab的顶部。一个更好的解决方案可能是下面的 Thor 给出的,但是脚本中的 shebang 行必须是 python 解释器的完整路径,例如#!/opt/python2.7/bin/python,不仅仅是包含目录。 -
您如何判断您的脚本是否有效?它会创建一个文件吗?因为您将输出发送到
/dev/null,正如@Emmet 提到的那样,它不会像您“手动”运行它时那样提供反馈。如果它真的很安静,也许给它一些输出只是为了调试。您也可以在crontab文件的顶部添加 MAILTO=your.address 以获取错误报告。 -
@roding,您应该只使用
crontab -e编辑crontab,将VISUAL或EDITOR环境变量设置为启动编辑器的crontol。 (因为你是从记事本开始的,所以我认为你不喜欢 vim。)