Python脚本在cron作业中运行时会引发错误,但不会在其他时间发生

时间:2014-07-16 20:25:41

标签: python shell cron crontab

我有一个shell脚本,包括执行python脚本。当我在终端中手动运行它时,它工作正常。但是,当我在cron作业中执行shell脚本时,python脚本失败。

当函数从module1导入module2时,显然会触发错误。错误引用的函数不在被导入的函数中,也不是语法错误在其自身执行时引发错误的函数。

这是我运行cron作业时记录的错误:

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 /Users/me/module2.py

任何人都知道这里发生了什么?

2 个答案:

答案 0 :(得分:6)

您可能正在使用不同版本的Python从cron运行脚本,该版本不支持字典理解语法。

要解决此问题,请在shebang行中明确添加所需的Python版本:

#!/usr/bin/env python2.7

或通过正确的命令从cron启动脚本:

* * * * /usr/bin/python2.7 /path/to/script.py

答案 1 :(得分:0)

我通过在 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