Python定时任务和路径

5

我有一个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/
1个回答

7

1
除了您在我的crontab顶部建议的SHELL命令之外,我还需要在我的driver.py脚本顶部添加这个shebang:#!/usr/bin/env python奇怪的是,如果我不包括后者并从主目录运行$ journalctl,则不会看到来自cron的任何错误日志,但driver.py不会完全执行(例如,它似乎没有导入lib.py)。感谢您提供env >建议。 - Quetzalcoatl
1
如果可以的话,您能否解答一下后续问题?例如,像我这样的业余爱好者如何才能自己想出“SHELL=/bin/bash”和“#!/usr/bin/env python”这样的解决方案?可能有哪些关于cron和/或Python的“标准”参考资料可以引导我找到正确的路径? - Quetzalcoatl
你好。关于你的后续问题。cron不读取用户环境变量的原因是出于安全考虑。cron的标准参考是Unix手册页面,例如http://www.unix.com/man-page/linux/5/crontab/。最后,关于“最佳实践”的提问在SO上是不相关的,而且我也没有一个好的答案。 - user2314737

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接