Crontab |缺少Python模块

时间:2014-04-17 15:00:55

标签: python crontab

我是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

4 个答案:

答案 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 

很难找到一个可行的解决方案,最终得到了这个。