AWS EC2和$\u服务器PHP变量上的Crontab

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

我的服务器中有一些用于数据库维护的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访问


任何关于从命令行成功访问$\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调用脚本?