我是Unix和crontab的新手。我遇到的唯一主要问题是将终端指向我正在尝试运行的特定程序的python模块。从命令行,程序运行正常,但不会从crontab。
第一个cronjob给我发了一封电子邮件,说cronjob正在运行。第二个(createUpdate)运行我构建的脚本,设置为每分钟运行一次。
crontab -l返回:
*/1 * * * * python /Users/JohnDoe/Desktop/emailalert.py
*/1 * * * * PYTHONPATH =/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages; export PYTHONPATH; python /Users/JohnDoe/Desktop/createUpdate.py
我是否正确构建了PYTHONPATH?
我应该在cron之前解决它吗?
是否需要'出口PYTHONPATH'?
修改 我忘了添加错误
/bin/sh: PYTHONPATH: command not found
Traceback (most recent call last):
File "/Users/JohnDoe/Desktop/createUpdate.py", line 1, in <module>
import beatbox
ImportError: No module named beatbox
答案 0 :(得分:10)
正确的方法是
*/1 * * * * PYTHONPATH=/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages python /Users/JohnDoe/Desktop/createUpdate.py
请注意变量赋值中的空格。没有分号,也不需要导出变量,因为在命令之前声明它们已使它们对命令本身有效。
答案 1 :(得分:2)
使用
*/1 * * * * PYTHONPATH=/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages python /Users/JohnDoe/Desktop/createUpdate.py
在你的crontab中。没有分号,PYTHONPATH
仅适用于python
和您的脚本的实例。
(此外,我认为你得到了
/bin/sh: PYTHONPATH: command not found
错误,因为PYTHONPATH
和等号之间有空格。)
答案 2 :(得分:0)
您不需要导出PYTHONPATH。如果您全局安装了beatbox,您应该能够在与Python调用相同的行(在同一命令中)包含环境设置,如下所示:
*/1 * * * * PYTHONPATH=/Library/Frameworks/Python.framework/Versions/Current/lib/python2.7/site-packages python /Users/JohnDoe/Desktop/createUpdate.py
另外,请确保变量名,等号和变量值之间没有任何空格。
您应该使用virtualenv
创建沙盒Python,这样您就不必全局安装外部库。如果您安装virtualenv并将依赖项安装到其中,您将能够执行类似这样的操作
*/1 * * * * /path/to/virtual/env/bin/python /Users/JohnDoe/Desktop/createUpdate.py
并且不用担心全局依赖。
以下是virtualenv的文档:http://www.virtualenv.org/en/latest/
答案 3 :(得分:0)
*/1 * * * * pip install beatbox && python /Users/JohnDoe/Desktop/createUpdate.py
很难找到一个可行的解决方案,最终得到了这个。