2011-12-04 14 views
0

我已經設置了一個cronjob,它可以更新某個系統中的一堆契約。當我在瀏覽器中運行PHP腳本時,它一切正常,但是當cronjob必須執行這個技巧時,它會失敗。我有點卡在這一個,因爲我沒有很多與cronjobs的經驗(嘿..我只能在DirectAdmin中設置它們)。我的PHP腳本有一些包含一些類,這些包括工作正常(我測試過,通過發送郵件給自己逐行)。當包含基類時,我有一個處理自動加載的類。當我做類似:: GetInstance()的時候失敗了。Cronjob doens不理解要執行的代碼?

我的cronjob看起來像:

* * * * * /usr/local/bin/php /home/username/domains/domain/public_html/path/to/script.php 

我能做些什麼來解決這個問題?也許不是通過PHP運行它,而是通過瀏覽器或其他東西?對不起,如果這是一個愚蠢的問題,但我不知道這一點;)

+0

如果從命令行執行腳本,腳本是否會運行? – dSquared

+1

在從普通shell調用時會執行'/ usr/local/bin/php/home/username/domains/domain/public_html/path/to/script.php'嗎?要檢查的要點包括:哪個用戶用來運行這個?環境設置是否正確?那麼權限呢? – Yahia

+0

我不是一個CL傢伙。我如何正確地測試這個? @Yahia,我不確定,我認爲它是來自hostingaccount的web用戶?既然工作放在那裏? – Ben

回答

2

請記住,當在CLI上執行PHP並使用/usr/local/bin/php時,您沒有設置正確的$_SERVER變量!我也有這個問題,因爲我的腳本不得不使用$_SERVER['DOCUMENT_ROOT']。如上所述,嘗試在普通shell中運行它以查看它是否有效。或者你可以改變你的cronjob命令:

wget -q http://yourdomain.com/path/to/script.php 

這通常效果很好,因爲它只是與從普通瀏覽器獲取該URL。

wget男人頁面在這裏:http://linux.die.net/man/1/wget

+0

謝謝,那就是我正在尋找的! :) +1並接受。 – Ben

0

你不能總是直接調用PHP文件,直接通過HTTP調用。從路徑判斷,它是網站的一部分,通常由瀏覽器執行,因此我將cronjob設置爲不被php-cli直接調用,而是通過對網站的URL執行curl請求。

+0

感謝您的回覆,但wget似乎是我的解決方案。 – Ben

+0

不客氣,很高興您找到了您的解決方案。 – favoretti

0

「失敗」是沒有問題的特徵,可以用一個suffucient之一。

在crontab文件

[email protected] 

加入這行並運行作業。
您將獲得腳本輸出並能夠更正您的代碼或提出明智的問題。

您也可以將stdout和stderr重定向到日誌文件

+0

感謝您的回覆,我試過沒有結果.. :(wget爲我做了。 – Ben