在EC2

时间:2017-01-31 18:11:23

标签: python amazon-ec2 cron environment-variables

我在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执行期间(或其他正在发生的事情)不同。可能是什么情况以及如何以简单的方式解决它?

感谢。

3 个答案:

答案 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秒后,你知道发生了什么。