Python脚本在cron作业中运行时报错,但其他时间正常
我有一个shell脚本,里面会执行一个python脚本。当我在终端手动运行这个脚本时,一切正常。但是当我在定时任务(cron job)中执行这个shell脚本时,python脚本就出错了。
错误似乎是在从module1导入函数到module2时发生的。出错的函数并不是正在被导入的函数,而且出错的那行代码单独执行时并不会报错。
这是我在运行定时任务时记录下来的错误信息:
File "/Users/me/module2.py", line 5, in <module>
from module1 import consolidate_rankings, build_all
File "/Users/me/module1.py", line 159
things = {row["thing"]: row for row in rows}
^
SyntaxError: invalid syntax
module2脚本的内容其实很简单:
#!/usr/bin/env python
from module1 import consolidate_rankings, build_all
consolidate_rankings()
build_all()
这是在shell脚本中调用这个python脚本的那一行:
python /Users/me/module2.py
有没有人知道这是怎么回事?
2 个回答
2
我通过在crontab里直接声明我的本地环境来解决这个问题(因为之前的方法没有帮助):
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/sifi/bin:/home/username/.local/bin:/home/username/bin:/home/username
7
你可能是通过定时任务(cron)运行你的脚本,而这个定时任务使用的是一个不支持字典推导语法的不同版本的Python。
要解决这个问题,你可以在脚本的第一行明确指定你想要的Python版本:
#!/usr/bin/env python2.7
或者通过正确的命令从定时任务(cron)启动你的脚本:
* * * * /usr/bin/python2.7 /path/to/script.py