【发布时间】:2018-07-13 19:53:57
【问题描述】:
我每 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 块中,它记录了异常:“没有名为 utility.utility_1 的模块”。我也尝试将shell脚本中的PYTHONPATH变量设置为/home/ziofil/python_scripts,但还是不行。
【问题讨论】:
-
在大多数情况下,这是因为 cron 没有设置 PATH 变量。所以它在你的文件系统中找不到“python”。尝试在您的 exec_scripts.sh 中执行以下操作:
/usr/lib/python2.7 script_30_mins.py(检查路径是否存在,也许您有另一个 python 版本,因此路径不同)。 -
但是python脚本被执行了:它创建了文件“explicit_log.txt”并在里面写了一行。您认为这仍然是 PATH 变量问题吗?
-
@UweMannl:
PATH没有问题。产生了输出,因此 Python 解释器正在执行。 -
@mhawke 你是对的,现在看到了。所以看起来解释器停在
from utilities.utility_1 import Utility。在这种情况下,解决方案应该是您的答案。 -
@UweMannl 你是对的:这是 python 二进制 cron 使用的问题。