我知道之前已经问过这个问题,但我仍然无法让它发挥作用。我的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)
什么都没发生,所以我猜问题不在于导入。
答案 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脚本没有问题。