Crontab Python脚本未运行

时间:2017-10-09 23:02:41

标签: python cron ubuntu-16.04

我知道之前已经问过这个问题,但我仍然无法让它发挥作用。我的crontab文件只有这个:

0 5 * * * /home/harry/my_env/bin/python /home/harry/compile_stats/process_tonight.py 

这是我的process_tonight.py的样子:

import datetime
import sys
sys.path.append('/home/harry/compile_stats/')
import compile   # Module in above path

print("Processing last night\n")

date = str(datetime.datetime.today().year) + "-" + str(datetime.datetime.today().month) + "-" + str(datetime.datetime.today().day-1)

compile.process(date, date)

当我从命令行定期运行它但在我安排它时不起作用时,这个文件工作得很好。

我还查看了我的/ var / log / syslog文件,我想要运行的任务没有显示在那里。

有什么想法吗?

修改 它在我的例子(5 A.M)中运行的时间只是一个随机的时间。它放在那里我没有运行。

编辑2#:

根据用户speedyturkey我简化了我的python脚本以更好地诊断问题:

import datetime
#import sys
#sys.path.append('/home/harry/compile_stats/')
#import compile   # Module in above path

print("Processing last night\n")

date = str(datetime.datetime.today().year) + "-" + str(datetime.datetime.today().month) + "-" + str(datetime.datetime.today().day-1)

#compile.process(date, date)

什么都没发生,所以我猜问题不在于导入。

5 个答案:

答案 0 :(得分:1)

根据评论,我认为问题在于如何在crontab中调用python脚本。运行您给出crontab的确切命令并修复它返回的任何问题。

答案 1 :(得分:1)

好的,我能够通过创建一个特定的cron文件,将信息放在那里并加载它来使它工作。

所以process_tonight.cron包含这个:

0 5 * * * /home/harry/my_env/bin/python /home/harry/compile_stats/process_tonight.py

我刚将它加载到crontab:

crontab process_tonight.cron

不确定为什么会这样,而另一种方式则不然(也许其他人有想法)。

答案 2 :(得分:0)

您可以执行以下操作,而不是尝试修改python脚本中的路径:

cd /home/harry/compile_stats/ && ./process_tonight.py

这将使import compile更容易正确。请注意,这还需要使process_tonight.py可执行文件(chmod +x process_tonight.py)并添加指向Python解释器的shebang(我猜...#!/ home / harry / my_env / bin / python)。

编辑以回应上面的编辑#2: 实际上无法判断它是否从您编写的代码中运行 - 打印语句未被重定向。我建议更改代码以执行某些可以检查的副作用。例如,导入子流程然后执行(示例):

subprocess.call("date > /home/harry/compile_stats/date.txt")

如果脚本执行正确,它会将date的输出重定向到指定的文件。

答案 3 :(得分:0)

我知道这有点愚蠢,但是检查系统时间/时区可能会有所帮助l))) 我将工作设置为在凌晨5点运行,当我在上午8点登录时,脚本没有任何结果。因此,我花了1个多小时来找出问题所在,然后才发现系统时间不正确且还没有到凌晨5点。

答案 4 :(得分:0)

您是否尝试过从Shell脚本运行它?我的python脚本遇到了同样的问题。我最终将命令放入外壳脚本中并运行它。它引发了一个错误,即未导入该库,因此我使用pip和--user标志进行了安装。现在cron运行shell脚本没有问题。