Php Elastic Beanstalk-Cron作业正在运行但未执行

Php Elastic Beanstalk-Cron作业正在运行但未执行,php,amazon-web-services,amazon-ec2,cron,Php,Amazon Web Services,Amazon Ec2,Cron,这是我第一次在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 .ebextensio

这是我第一次在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用户的身份运行该命令,但我也尝试了
root

* * * * * ec2-user /usr/bin/php -q /var/app/current/tests/cron.php
部署代码后,我可以看到文件
/etc/cron.d/cron_job
已经创建。当我运行
sudotail/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用户的身份登录


我错过什么了吗?还是我的cron作业代码设置不正确?

通过SSH登录,检查生成的cron作业文件
/etc/cron.d/cron_作业
是否有unix行结束符,即
ASCII文本,即
ASCII文本,带有CRLF行结束符

要检查行结束,请参阅


注意:如果您有windows行尾,则必须转换文件
.ebextensions/cron_jobs.txt的行尾,以便您可以使用或类似的程序。

我在尝试访问AWS RDS数据库时遇到了类似的php脚本问题。您的php脚本是否通过
$\u服务器['RDS\u xxxx']
获取数据库详细信息?如果是这样,当cron运行php脚本时,这些
RDS_xxxx
变量在环境中不存在

为了解决这个问题,我在cron文件的开头添加了变量:

RDS_HOSTNAME=<my_database_hostname>
RDS_PORT=<my_database_port>
RDS_USERNAME=<my_database_username>
RDS_PASSWORD=<my_database_password>
RDS_DB_NAME=<my_database_name>

* * * * * php /path/to/my/script.php
RDS\u主机名=
RDS_端口=
RDS\u用户名=
密码=
RDS_DB_名称=
*****php/path/to/my/script.php

我在AWS上的RDS_uuu变量也有类似的问题,我按照讨论进行了讨论,结果很有效。 这是我以前的工作:

RDS_HOSTNAME=<my_database_hostname> 
RDS_PORT=<my_database_port>
RDS_USERNAME=<my_database_username>
RDS_PASSWORD=<my_database_password> 
RDS_DB_NAME=<my_database_name>
* * * * * cd /var/app/current && bin/cake notifications send_push >> /var/tmp/notifications.log 2>&1

现在我可以像这样访问它们:
$\u SERVER['RDS\u HOSTNAME']

您的数据库在哪里运行?RDS?@Rico RDS。这是某种权限问题吗?可能是。看起来很奇怪,你介意发布
cron.php
的代码吗?还有,
cron.php
是否会吐出任何调试信息?啊哈!我发现了问题。我的系统依靠环境变量
PARAM1
来确定数据库信息。当cron作业运行时,不会传递这些变量。你知道这是否可能吗?或者我必须想出另一个解决方案吗?我最终使用了
wget
来运行cron,它似乎在其中添加了变量。所以我想我可以走了:)谢谢你的帮助!
* * * * * . /opt/elasticbeanstalk/support/envvars cd /var/app/current && bin/cake notifications send_push >> /var/tmp/notifications.log 2>&1