【发布时间】:2014-05-27 09:53:27
【问题描述】:
这是我第一次在 Elastic Beanstalk (EB) 上运行 cron 作业。部署我的代码后,似乎 cron 作业已创建并正在运行,但 PHP 脚本未正确执行。这是我的设置。
在我的.ebextensions 文件夹中,我有一个名为01run.config 的文件。
container_commands:
01_remove_old_cron_jobs:
command: "crontab -r || exit 0"
02_cronjobs:
command: "cat .ebextensions/cron_jobs.txt > /etc/cron.d/cron_job && chmod 644 /etc/cron.d/cron_job"
leader_only: true
在我的.ebextensions 文件夹中,我还有一个cron_jobs.txt 文件。请注意,按照另一个 stackoverflow 帖子的指示,我在此文件末尾有一个换行符。在下面的示例中,我以ec2-user 运行命令,但我也尝试了root。
* * * * * ec2-user /usr/bin/php -q /var/app/current/tests/cron.php
部署我的代码后,我可以看到文件/etc/cron.d/cron_job 已创建。当我运行 sudo tail /var/log/cron 时,我还可以看到每分钟运行的 cron 作业。
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ sudo tail /var/log/cron
Apr 13 12:54:53 ip-xxx-xxx-xxx-xxx crontab[26093]: (root) DELETE (root)
Apr 13 12:55:01 ip-xxx-xxx-xxx-xxx crond[1230]: (*system*) RELOAD (/etc/cron.d/cron_job)
Apr 13 12:55:01 ip-xxx-xxx-xxx-xxx CROND[26128]: (ec2-user) CMD (/usr/bin/php -q /var/app/current/tests/cron.php)
Apr 13 12:56:01 ip-xxx-xxx-xxx-xxx CROND[26139]: (ec2-user) CMD (/usr/bin/php -q /var/app/current/tests/cron.php)
在/var/app/current/tests/cron.php 内,我有一些代码可以将一行添加到 MySQL 数据库(托管在 RDS 上)。但是没有任何东西被添加到数据库中。
然后我尝试直接通过终端窗口运行 cron 命令:
$ /usr/bin/php -q /var/app/current/tests/cron.php
它运行没有错误并将记录添加到数据库中。我在终端以ec2-user 登录。
我错过了什么吗?还是我的 cron 作业代码设置不正确?
【问题讨论】:
-
您的数据库在哪里运行? RDS?
-
@Rico RDS。是某种权限问题吗?
-
可能是。看起来很奇怪,你介意发布
cron.php的代码吗?另外,cron.php是否会吐出任何调试信息? -
啊哈!我发现了这个问题。我的系统依赖 环境变量
PARAM1来确定数据库信息。当 cron 作业运行时,这些变量不会被传递。你知道这是否可能吗?还是我必须想出另一个解决方案? -
我最终使用
wget运行似乎添加变量的 cron。所以我想我很高兴 :) 感谢您的帮助!
标签: php amazon-web-services amazon-ec2 cron