AWS EC2和$\u服务器PHP变量上的Crontab
我的服务器中有一些用于数据库维护的PHP脚本,需要定期执行。显然,最简单的解决方案是使用系统cron计划其运行 脚本需要从$\u server访问一些服务器变量,如数据库主机名、cron参数等 我可以从命令行毫无问题地运行预定的cron命令,而且一切似乎都很正常(调用类似于php filename.php的东西)。但是,当从cron执行相同的命令时,脚本失败,报告的错误如下所示: PHP注意:未定义索引:RDS_数据库中 /第8行php上的var/app/current/app/xx/Db/ConnectionFactory.php 从cron运行时,$\u服务器变量似乎没有正确初始化,但它可以从命令行运行。我试过使用crontab-u ec2 user-e,但运气不佳 我不想使用wget来运行脚本,因为它会增加一些开销,并且脚本是隐藏的,无法从HTTP访问AWS EC2和$\u服务器PHP变量上的Crontab,php,amazon-web-services,amazon-ec2,cron,crontab,Php,Amazon Web Services,Amazon Ec2,Cron,Crontab,我的服务器中有一些用于数据库维护的PHP脚本,需要定期执行。显然,最简单的解决方案是使用系统cron计划其运行 脚本需要从$\u server访问一些服务器变量,如数据库主机名、cron参数等 我可以从命令行毫无问题地运行预定的cron命令,而且一切似乎都很正常(调用类似于php filename.php的东西)。但是,当从cron执行相同的命令时,脚本失败,报告的错误如下所示: PHP注意:未定义索引:RDS_数据库中 /第8行php上的var/app/current/app/xx/Db/Co
任何关于从命令行成功访问$\u服务器,但从crontab运行时失败的提示?都有相同的问题。找到了一个解决方案:
echo "InstanceID: ".get_cfg_var('INSTANCE_ID')."\n";
出于某种原因,它在我的ec2用户上运行良好,但不是根cron作业。使用该函数而不是访问$\u服务器阵列解决了我的问题。也有同样的问题。找到了一个解决方案:
echo "InstanceID: ".get_cfg_var('INSTANCE_ID')."\n";
出于某种原因,它在我的ec2用户上运行良好,但不是根cron作业。使用该函数而不是访问$\u服务器阵列解决了我的问题。$\u服务器只有在使用任何web服务器运行PHP时才起作用。如果您使用crontab并通过命令行执行PHP,它将无法工作。您可以参考PHP文档$\u只有在使用任何web服务器运行PHP时,服务器才起作用。如果您使用crontab并通过命令行执行PHP,它将无法工作。您可以参考PHP文档,因为@Baminc和@Ankur说解决方案是使用get\u cfg\u var函数来获取信息,因为$\u服务器只有在您从web浏览器访问它时才起作用 我所做的是以下操作,例如服务器名称:
if (isset($_SERVER['SERVER_NAME'])) {
$myServerName = $_SERVER['SERVER_NAME'];
} else {
$myServerName = get_cfg_var('SERVER_NAME');
}
希望这有帮助 正如@Baminc和@Ankur所说的,解决方案是使用get\u cfg\u var函数来获取信息,因为$\u服务器只有在您从web浏览器访问它时才能工作 我所做的是以下操作,例如服务器名称:
if (isset($_SERVER['SERVER_NAME'])) {
$myServerName = $_SERVER['SERVER_NAME'];
} else {
$myServerName = get_cfg_var('SERVER_NAME');
}
希望这有帮助 变量设置在哪里_服务器是环境的一部分,所以我在Apache配置中假设,在这种情况下,cron将无法使用服务器。您需要将它们作为环境变量导出为什么不将所需的值(即数据库端点)配置到脚本或某些配置文件中?如果您自己没有将
RDS\u数据库
变量添加到$\u服务器
中,为什么会期望它出现在$\u服务器中?我使用$\u服务器,因为它们可以从AWS Elastic Beanstalk的控制台管理中轻松配置。我在调试和发布中有不同的服务器,我想更改实例之间的最小代码。我假设_服务器是在apache中配置的。问题是,为什么从命令行手动调用脚本时,脚本正在运行,而不是从cron调用脚本?变量设置在哪里_服务器是环境的一部分,所以我在Apache配置中假设,在这种情况下,cron将无法使用服务器。您需要将它们作为环境变量导出为什么不将所需的值(即数据库端点)配置到脚本或某些配置文件中?如果您自己没有将RDS\u数据库
变量添加到$\u服务器
中,为什么会期望它出现在$\u服务器中?我使用$\u服务器,因为它们可以从AWS Elastic Beanstalk的控制台管理中轻松配置。我在调试和发布中有不同的服务器,我想更改实例之间的最小代码。我假设_服务器是在apache中配置的。问题是,为什么从命令行手动调用脚本时,脚本会运行,而不是从cron调用脚本?