在 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 startcrontab -e 这允许我将 cron 作业设置为“ec2-user”,而无需指定用户或环境变量或任何东西。例如,这一行有效:0 12 * * * python3 /home/ec2-user/example.py 我也发布了这个here。

【讨论】:

以上是关于在 EC2 上运行 cronjob(Python 写入文件)的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 上的 Cronjob 未运行

使用 cronjob + API 的 Amazon MapReduce

为啥多线程 python 程序在 ec2 微实例上运行缓慢?

监控 GKE 上运行的 Cronjob

无法让 cron 在 Amazon EC2 上工作?

检查您的python代码是否在EC2的后台运行