在 EC2 上运行 cronjob(Python 写入文件)
Posted
技术标签:
【中文标题】在 EC2 上运行 cronjob(Python 写入文件)【英文标题】:Running cronjob (Python write file) on EC2 【发布时间】:2017-01-31 18:11:23 【问题描述】:我在 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 正在运行,并且怀疑在 Cronjob 执行期间某些 ENV 参数不同(或发生了其他事情)。可能是什么情况以及如何以简单的方式解决它?
谢谢。
【问题讨论】:
* * * * * /home/ec2-user/python/write_file.py
应该是 * * * * * python /home/ec2-user/python/write_file.py
o 最好在脚本的第一行添加 #!/bin/usr/python
。
尝试这样做 * * * * * cd /ful/path/script/ && python script.py
如果某个答案对您有帮助,请考虑投票/接受作为答案。
想一想,如果你的工作很简单,你可以使用 lambda 并安排它,而不是 cron 和 ec2 实例。
【参考方案1】:
在 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
奖励:(请随意忽略)我在分钟任务上对 cron 的第一个响应调试方法:
import os
while True:
print os.popen('pgrep -lf python').read()
从 shell 执行将弹出所有由 cron 调用的 python 模块。 60 秒后,您就会知道发生了什么。
【讨论】:
【参考方案2】:最好指定python解释器的绝对路径,因为系统可能无法识别该命令。或者您可以在脚本的第一行将 shebang 行添加到您的脚本 #!pathToPythonInterpreter
确保计划执行脚本的用户对文件有读写权限
确保您没有使用系统corntab /etc/crontab 进行计划,因为这样您就必须指定将执行该命令的用户。
希望对你有帮助
【讨论】:
【参考方案3】:我最近开始在 ec2 实例上使用 Amazon 的 linux 发行版,在为 cron 尝试了各种事情之后,我所需要的只是:sudo service crond start
crontab -e
这允许我将 cron 作业设置为“ec2-user”,而无需指定用户或环境变量或任何东西。例如,这一行有效:0 12 * * * python3 /home/ec2-user/example.py
我也发布了这个here。
【讨论】:
以上是关于在 EC2 上运行 cronjob(Python 写入文件)的主要内容,如果未能解决你的问题,请参考以下文章
Elastic Beanstalk 上的 Cronjob 未运行
使用 cronjob + API 的 Amazon MapReduce