我在EC2上有一个简单的Python脚本来将文本写入文件:
with open("/home/ec2-user/python/test.txt", "a") as f:
f.write("test\n\n")
那个python脚本在这里:
/home/ec2-user/python/write_file.py
当我手动运行该脚本时('python /home/ec2-user/python/write_file.py') - 正在将新文本写入文件('/home/ec2-user/python/test.txt' )。
使用Cronjob安排相同的脚本时 - 没有数据添加到文件中。我的Cronjob看起来像这样:
* * * * * python /home/ec2-user/python/write_file.py
我验证Cronjob正在运行并且怀疑某些ENV参数在Cronjob执行期间(或其他正在发生的事情)不同。可能是什么情况以及如何以简单的方式解决它?
感谢。
答案 0 :(得分:0)
更好地指定python解释器的绝对路径,因为系统可能无法识别该命令。或者,您可以在脚本的第一行
中将shebang行添加到脚本#!pathToPythonInterpreter
确保计划执行脚本的用户有权读取和写入文件
确保您没有使用系统corntab / etc / crontab进行规划,因为您必须指定将执行该命令的用户。
我希望这会对你有所帮助
答案 1 :(得分:0)
我最近开始在ec2实例上使用亚马逊的Linux发行版,在为cron尝试各种各样的东西后,我需要的是:
$numb
sudo service crond start
这允许我将cron作业设置为“ec2-user”而不指定用户或env变量或任何东西。例如,这条单线工作:
crontab -e
我还发布了这个here。
答案 2 :(得分:0)
在crontab上
HOME=/home/ec2-user/
* * * * * python /home/ec2-user/python/write_file.py
或(测试目的)
* * * * * root /home/ec2-user/python/write_file.py
在write_file.py
添加shebang(第一行)
#!/usr/bin/env python
BONUS :(随意忽略)我对cron on minute任务的第一个响应调试方法:
import os
while True:
print os.popen('pgrep -lf python').read()
从shell执行的会弹出cron调用的所有python模块。 60秒后,你知道发生了什么。