[英]Crontab Python Script not running
我知道之前曾有人问过这个问题,但我仍然无法使其正常工作。 我的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点)只是随机插入的时间。我在其中插入的任何时间都没有运行。
编辑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)
什么也没发生,所以我想问题不在于导入。
根据评论,我相信问题在于您如何在crontab中调用python脚本。 运行您给crontab的确切命令,并修复它返回的所有问题。
好的,我可以通过创建一个特定的cron文件,将信息放到那里并加载它来使其工作。
因此process_tonight.cron包含以下内容:
0 5 * * * /home/harry/my_env/bin/python /home/harry/compile_stats/process_tonight.py
然后我将其加载到crontab中:
crontab process_tonight.cron
不太确定为什么这样做是可行的,反之则不行(也许其他人有想法)。
您可以尝试执行以下操作,而不是尝试从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
输出重定向到指定的文件。
我知道这有点愚蠢,但是检查您的系统时间/时区可能会有所帮助。)))我将作业设置为在凌晨5点运行,当我在上午8点登录时,脚本没有结果。 因此,我花了1个多小时来找出问题所在,然后才发现系统时间不正确,并且凌晨5点还没有到。
您是否尝试过从Shell脚本运行它? 我的python脚本遇到了同样的问题。 我最终将命令放入外壳脚本中并运行它。 它引发了一个错误,即未导入该库,因此我使用pip和--user标志进行了安装。 现在cron运行shell脚本没有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.