我每 30 分钟使用 cron 执行一个 python 脚本,但它在 import 语句处停止,我不明白为什么,因为我没有得到任何反馈。
在我的 crontab 中我有 */30 * * * * sh exec_script.sh
文件 exec_script.sh
是
cd /home/ziofil/python_scripts
python script_30_mins.py
在我的python脚本中
import logging
logging.basicConfig(filename="explicit_log.txt",level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug("script is executed")
# in the python_scripts folder there is a subfolder utilities/ that
# contains utility_1.py, were I define the class Utility
from utilities.utility_1 import Utility
logger.debug("Utility loaded")
utility = Utility()
logger.debug("object creation")
utility.do_your_thing()
logger.debug("done its thing")
如果我从终端执行 python script_30_minutes.py
,一切正常,但使用 cron 时,执行会在 import
语句处停止(我读到“脚本已执行",但注意其他)。
出了什么问题?
更新:我将 import 语句放在 try/except
block 中,它记录了异常:“No module named utilities.utility_1”。我也尝试将shell脚本中的PYTHONPATH变量设置为/home/ziofil/python_scripts
,但还是不行。
最佳答案
我发现了问题所在。 @UweMannl 一直都是对的。在 @mhawke 指出 cron 的环境与我的终端环境不同之后,我想也许 python 二进制文件也可能不同,实际上它是:我想要 /home/ziofil/anaconda3/bin/python
和 cron 使用 /usr/bin/python
。
我将脚本的最后一行修改为 /home/ziofil/anaconda3/bin/python script_30_mins.py
一切正常!
关于当脚本作为 cronjob 运行时,python 脚本在 import 语句处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597496/