簡體   English   中英

AWS EC2和$ _SERVER PHP變量上的Crontab

[英]Crontab on AWS EC2 and $_SERVER PHP variables

我的服務器中有一些PHP腳本用於數據庫維護,需要定期執行。 顯然,最簡單的解決方案是使用cron計划其運行。

腳本需要$ _SERVER訪問的一些服務器變量,例如數據庫主機名,cron參數等。

我可以從命令行運行計划的cron命令,沒有任何問題,並且一切似乎都正常(調用php filename.php之類的東西)。 但是,當從cron執行相同的命令時,腳本將失敗,並且報告的錯誤如下所示:

PHP注意:未定義的索引:第8行/var/app/current/app/xx/Db/ConnectionFactory.php中的RDS_DATABASE

從cron運行時,似乎未正確初始化$ _SERVER變量,但可從命令行使用。 我曾嘗試使用crontab -u ec2-user -e,但沒有運氣。

我不想使用wget來運行腳本,因為它增加了一些開銷,並且腳本無法從HTTP訪問。

關於從命令行成功訪問$ _SERVER的任何提示,但是從crontab運行時失敗?

有同樣的問題。 找到一個解決方案:

echo "InstanceID: ".get_cfg_var('INSTANCE_ID')."\n";

由於某種原因,它在我的ec2用戶上可以正常工作,但不能作為root cron作業。 使用該函數而不是訪問$ _SERVER數組解決了我的問題。

$ _SERVER僅在您將使用任何Web服務器運行PHP時有效。 如果您將使用crontab並通過命令行執行PHP,它將無法正常工作。 您可以參考PHP文檔http://php.net/manual/en/reserved.variables.server.php#refsect1-reserved.variables.server-indices

正如@Baminc和@Ankur所說,解決方案是使用get_cfg_var函數獲取信息,因為$ _SERVER僅在您從Web瀏覽器訪問它時才起作用。

下面是我使用SERVER_NAME進行的操作:

if (isset($_SERVER['SERVER_NAME'])) {
    $myServerName = $_SERVER['SERVER_NAME'];
} else {
    $myServerName = get_cfg_var('SERVER_NAME');
}

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM