Php 检测临时服务器上是否正在运行Cron作业
我正在建立一个网站,每天运行一系列cron任务来更新数据库中的信息,然后在网站中使用。我有三个环境设置:开发(我的计算机)、暂存和实时。staging和live都是共享主机上的帐户。我遇到的问题是根据代码运行的环境来决定使用哪个数据库访问凭据。理想情况下,这三个数据库都具有相同的凭据,但由于staging和live都位于共享服务器上,因此我无法控制数据库的名称。我已经在自己的计算机上镜像了实时数据库名称和访问凭据,但在登台时无法执行此操作 我想做的是在cron任务运行时为正确的环境自动选择正确的凭据,如下所示:Php 检测临时服务器上是否正在运行Cron作业,php,cron,crontab,Php,Cron,Crontab,我正在建立一个网站,每天运行一系列cron任务来更新数据库中的信息,然后在网站中使用。我有三个环境设置:开发(我的计算机)、暂存和实时。staging和live都是共享主机上的帐户。我遇到的问题是根据代码运行的环境来决定使用哪个数据库访问凭据。理想情况下,这三个数据库都具有相同的凭据,但由于staging和live都位于共享服务器上,因此我无法控制数据库的名称。我已经在自己的计算机上镜像了实时数据库名称和访问凭据,但在登台时无法执行此操作 我想做的是在cron任务运行时为正确的环境自动选择正确的
if(environment === staging) {
//define db access constants for staging here
else {
//define db access constants for live or dev here
}}
通常,对于这类事情,我会使用$\u SERVER['SERVER\u NAME'],但由于它在Cron中运行,$\u SERVER auto global不可用。如何检测cron作业中脚本运行的环境?您可以在crontab文件中添加一个额外的环境变量:
STAGING=1
然后检查$\u ENV['STAGING']==1
甚至
HOSTING_ENV=PRODUCTION
然后检查
$\u ENV['HOSTING\u ENV']='PRODUCTION'
您可以在crontab文件中添加一个额外的环境变量:
STAGING=1
然后检查$\u ENV['STAGING']==1
甚至
HOSTING_ENV=PRODUCTION
然后检查ajreal和gms8994都很好的环境变量解决方案。另一种方法是获取当前主机名:
sean@gimmebarvm-sean:~$ php -r 'echo php_uname("n") . "\n";'
gimmebarvm-sean
ajreal和gms8994提供的环境变量解决方案都很好。另一种方法是获取当前主机名:
sean@gimmebarvm-sean:~$ php -r 'echo php_uname("n") . "\n";'
gimmebarvm-sean
通过WGET运行cron,通过域而不是PHP命令行调用它
然后,您将能够通过其域检测平台通过WGET运行cron,方法是通过域而不是通过PHP命令行调用它
然后,在访问阵列时,您将能够通过其域检测平台应该是
[
和]
而不是{
和}
。谢谢,我想这刚刚为我提供了解决方案。我使用$argv中显示的命令行参数将变量传递到脚本中。我将在登台时传递一个额外的参数,并使用它来决定使用哪个凭据。我应该澄清我没有访问crontab文件的权限,因为我只能通过CPanel接口访问服务器。@scoates很好。我最近一直在用散列,所以花括号一直在我的脑海里。当访问数组时,应该是[
和]
而不是{
和}
。谢谢,我想这刚刚为我提供了解决方案。我使用$argv中显示的命令行参数将变量传递到脚本中。我将在登台时传递一个额外的参数,并使用它来决定使用哪个凭据。我应该澄清我没有访问crontab文件的权限,因为我只能通过CPanel接口访问服务器。@scoates很好。我最近一直在用散列,所以花括号一直在我的脑海里。更新。