放在crontab上时不会执行Python脚本

时间:2016-08-19 08:54:23

标签: python shell cron-task

我编写了一个python脚本,它正在读取一些日志,然后将所需信息写入csv文件。如果我通过python myscript.py手动执行它,它工作正常。但是当我通过cron调用它时不工作 我试过了:

* * * * * python /path/to/myscript.py
* * * * * /path/to/myscript.py
* * * * * /usr/bin/python /path/to/myscript.py

在尝试失败后,我将python myscript.py放入shell脚本并手动运行,但它在cron中再次起作用,但它没有。

3 个答案:

答案 0 :(得分:0)

cron的默认shell不是/bin/bash,因此您需要提供Python可执行文件的完整路径 检查which python的输出。在我的机器上/usr/bin/python 假设这样,你的cron作业条目应该是:

* * * * * /usr/bin/python /path/to/myscript.py

有时您希望在运行脚本之前使用virtualenv或设置一些环境变量或更改工作目录 在这种情况下,在bash中创建包装脚本非常方便:

#!/bin/bash
# Change working directory
cd /path/to
# Activate Python virtual environment
source bin/activate
# Set some environment variable
export LOG_FILE_PATH="/var/log/whatever.log"
# Finally run your python script
python myscript.py

鉴于您将上述脚本保存到/path/to/myscript_wrapper.sh,您的cron作业条目将如下所示:

* * * * * /bin/bash /path/to/myscript_wrapper.sh

答案 1 :(得分:0)

确保在python脚本中不使用任何类型的相对路径。这可能导致脚本退出并显示错误。

因此,请确保在您的脚本中不使用../to/something,而是使用/path/to/something

with open('../file.txt', 'r') as f:

应该成为

with open('/full/path/to/file.txt', 'r') as f:

答案 2 :(得分:0)

  • 输入“ 哪个python ”(如果使用的是python3或python3.6,则需要使用哪个python3
  • 它将显示python路径:/ bin / python。
  • 在Cron作业中设置值-* * * * * / bin / python

如果要通过cronjob在bash脚本中执行python文件。您应该在bash脚本中使用python的完整路径(示例: / bin / python / python file / file.py的路径)。