【发布时间】:2014-02-10 07:34:57
【问题描述】:
我的服务器中有一些用于数据库维护的 PHP 脚本,需要定期执行。显然,最简单的解决方案是使用系统 cron 安排其运行。
脚本需要一些从 $_SERVER 访问的服务器变量,例如数据库主机名、cron 参数等。
我可以毫无问题地从命令行运行预定的 cron 命令,并且一切似乎都运行良好(调用类似 php filename.php 的东西)。但是,当从 cron 执行相同的命令时,脚本会失败,并且报告的错误如下:
PHP 通知:未定义索引:RDS_DATABASE 在 /var/app/current/app/xx/Db/ConnectionFactory.php 第 8 行 PHP
似乎 $_SERVER 变量在从 cron 运行时未正确初始化,但它可以从命令行运行。我试过 crontab -u ec2-user -e 但没有运气。
我不想使用 wget 来运行脚本,因为它增加了一些开销,并且脚本被隐藏,无法从 HTTP 访问。
有关从命令行成功访问 $_SERVER,但从 crontab 运行时失败的任何提示?
【问题讨论】:
-
变量设置在哪里? _SERVER 是环境的一部分,所以我假设在您的 Apache 配置中,在这种情况下,它们对 cron 不可用。您需要将它们导出为环境变量
-
为什么不将所需的值(即数据库端点)配置到脚本或某些配置文件中?如果您自己没有将
RDS_DATABASE变量添加到$_SERVER中,为什么还要期望它出现呢? -
我使用 $_SERVER,因为它们可以通过 AWS Elastic Beanstalk 的控制台管理轻松配置。我在调试和发布中有不同的服务器,我想更改实例之间的最小代码。我想 _SERVER 是在 apache 中配置的。问题是为什么脚本在从命令行手动调用而不是从 cron 调用时运行?
标签: php amazon-web-services amazon-ec2 cron crontab