我有一个Python驱动程序和库脚本,它们是同级的:
/home/mydir/pythonProjs/
driver.py
lib.py
在driver.py
中,我有以下代码行:
from lib import method1
在我的Linux命令行中,以下操作是成功的:
python /home/mydir/pythonProjs/driver.py
但是当我在crontab中尝试以下操作时:
10 1 * * * export PYTHONPATH=~/mydir/pythonProjs; python /home/mydir/pythonProjs/driver.py
我收到了错误信息:
ImportError: No module named lib.method1
我还尝试在crontab命令中更改路径设置为完全限定路径
/home/mydir/pythonProjs
,省略'export',也尝试编写.sh文件(带有必要的#!bin/bash...)。我有一个主要问题和一个后续问题: 主要:有什么最佳实践方式来解决我的问题? 后续: cron与我的shell具有不同的路径访问权限的哲学是什么?
在被快速投票之前,我想提到,我已经阅读但没有成功(或正确解析)以下内容: - 在哪里可以设置cron使用的环境变量? - 运行Python的Crontab问题 - http://pythonadventures.wordpress.com/2012/03/31/calling-a-python-script-from-crontab/
#!/usr/bin/env python
奇怪的是,如果我不包括后者并从主目录运行$ journalctl,则不会看到来自cron的任何错误日志,但driver.py不会完全执行(例如,它似乎没有导入lib.py)。感谢您提供env >
建议。 - Quetzalcoatlcron
不读取用户环境变量的原因是出于安全考虑。cron
的标准参考是Unix手册页面,例如http://www.unix.com/man-page/linux/5/crontab/。最后,关于“最佳实践”的提问在SO上是不相关的,而且我也没有一个好的答案。 - user2314737