[英]Elastic Beanstalk Linux 2 Cron Job running but not executing
我已将我的配置文件简化为我能想到的最简单的示例,但我仍然无法让 cron 执行。 这是一个 django 项目,虽然看起来 crons 正在尝试运行,但它们实际上并没有执行。
.ebextensions/cron-log.config
"/etc/cron.d/test_cron":
mode: "000644"
owner: root
group: root
content: |
*/1 * * * * root . /opt/elasticbeanstalk/deployment/env && echo "TESTING" >> /var/log/test_log.log 2>&1
commands:
rm_old_cron:
command: "rm -fr /etc/cron.d/*.bak"
ignoreErrors: true
从 aws 下载日志时,test_log.log 不存在
在日志中返回的 cron 文件中,它显示:
Oct 29 09:03:01 ip-172-31-8-91 CROND[10212]: (root) CMD (. /opt/elasticbeanstalk/deployment/env && echo "TESTING" >> /var/log/test_log.log 2>&1)
我已经尝试了很多变体,包括让运行的命令在我们的数据库中进行更改,但它似乎从未真正执行过。
我最近遇到了同样的问题(PHP ElasticBeanstalk,迁移到 AL2),并找到了这个解决方案。
基本上,由于 Amazon Linux 2 不再具有“/opt/elasticbeanstalk/support/envvars”,并且“/opt/elasticbeanstalk/deployment/env”需要 sudo 才能访问,因此您需要为您的 cron 有效地创建自己的环境变量文件可以参考的职位。 创建一个新的 .ebextensions 配置脚本,其中包含以下内容:
commands:
setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export \(.key)=\"\(.value)\""' > /etc/profile.d/sh.local
然后,引用“/etc/profile.d/sh.local”文件而不是“/opt/elasticbeanstalk/deployment/env”。 您的 cron 条目现在应该如下所示:
*/1 * * * * root . /etc/profile.d/sh.local && echo "TESTING" >> /var/log/test_log.log 2>&1
...你应该很高兴去! :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.