Python脚本在cron作业中运行时报错,但其他时间正常

4 投票
2 回答
2608 浏览
提问于 2025-04-18 13:35

我有一个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

撰写回答