我正在尝试使用crontab运行一个简单的Python脚本,但我无法让它工作。不使用Python时,我可以在crontab中运行一个简单的程序。以下是我在Crontab文件中运行的行:
* * * * * echo “cron test” >> /home/ftpuser/dev/mod_high_lows/hello.txt
我也可以直接从命令行运行这个python脚本testit.py。这是我输出csv文件的testit.py文件。
#!/usr/bin/env python
import f_file_handling
_data = [(12,15,17)]
f_file_handling.csv_out('my_file_test',_data)
上面的文件有我做的一个函数,但是我知道它有效,因为当我从命令行运行testit.py时它就像我期望的那样:
python testit.py
所以我让Crontab处理它自己和testit.py文件来处理它自己然后我尝试用Crontab运行testit.py文件。 我确实使用命令:
生成了testit.py文件的可执行文件chmod +x testit.py
我看到它的可执行文件,因为当我在正确的目录中时,我的linux命令窗口中的文件显示为绿色。 现在在我用来运行早期Crontab测试的同一个Crontab文件中,我添加了以下行:
* * * * * /home/ftpuser/dev/mod_high_lows/testit.py
是的,我想要每分钟执行一次,只是尝试运行最简单的测试,让Crontab和Python一起工作。
以下是我正在使用的内容:
Ubuntu 14.04.2 LTS(GNU / Linux 3.13.0-52-generic x86_64)
Python 2.7
以上是在我设置的linux服务器上。
你看我的testit.py文件顶部的shebang行,从我的研究中看这应该有用 至于我的testit.py python文件,我在windows机器上写了它,然后将它传送到服务器,但是当crontab和python不能一起工作时,我还使用Nano文本编辑器从Linux命令窗口编码文件,但是尝试通过Crontab运行testit.py文件时没有任何区别。因此,即使我直接在Linux服务器上编写testit.py代码也不会运行(以防万一窗口在我的文件中创建隐藏字符)。
答案 0 :(得分:6)
cron在有限的环境中运行命令。只有少数环境变量
自动设定。它加载/etc/environment
指定的环境
和/etc/security/pam_env.conf
,但不是你的环境变量
可能已设置在.bashrc
或.profile
。
设置crontab条目
* * * * * /usr/bin/env > /tmp/out
查看实际设置的环境变量。 一旦你有/ tmp / out,就不要忘记删除crontab条目。
运行Python脚本时,您可以使用一个重要的环境变量 可能需要设置的是PYTHONPATH。所以在你的crontab顶部添加一个 PYTHONPATH设置如:
PYTHONPATH=/home/ftpuser/dev/mod_high_lows
请务必添加包含f_file_handling
模块的目录
Python将在运行语句
import f_file_handling
最后,默认情况下还要注意cron runs commands in your home directory。 然而,最好是明确的,并在脚本中指定文件时提供完整路径:
f_file_handling.csv_out('/path/to/my_file_test',_data)
答案 1 :(得分:0)
我不确定这是否会有所帮助,但我总是成功地通过将此行添加到crontab文件的末尾来成功地从cron中运行python脚本:
@reboot python /home/ftpuser/dev/mod_high_lows/testit.py &
行末必须&
。如果这是您需要的,并且您希望此脚本每分钟执行一次,您可以将整个脚本放在一个循环中,然后在每个循环的迭代结束时进行一分钟的休眠。
你可能还需要在python之前加一个sudo
,虽然crontabs应该以root身份运行,所以这可能不会是必要的。这个方法适用于在我的Raspberry Pi启动时运行脚本。
答案 2 :(得分:0)
有一件事总能让我:你必须在crontab文件的末尾留一个空行。 Cron不会运行crontab的最后一行!