我编写了一个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中再次起作用,但它没有。
答案 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)
如果要通过cronjob在bash脚本中执行python文件。您应该在bash脚本中使用python的完整路径(示例: / bin / python / python file / file.py的路径)。