2010-05-01 100 views
0

我有一個cron作業,每五分鐘運行一次PHP腳本; PHP腳本在腳本的末尾執行兩個bash命令。我知道腳本正在運行,因爲它附加了一個日誌文件。當我通過Ubuntu Gnome Terminal手動運行PHP腳本時,兩個bash命令都完美無瑕地執行;但是當PHP腳本通過cron觸發時,兩個bash命令不會運行。有任何想法嗎?通過cron作業時不執行bash命令 - PHP

$command = 'notify-send "' . count($infoleakPosts) . ' New Posts."'; 
`$command`; 

$command = 'firefox http://example.com'; 
`$command`; 

*/1 * * * * php /home/andrew/grab.php USERNAME PASSWORD # JOB_ID_1 
+0

您是否試圖添加完整路徑? – Cesar 2010-05-01 01:48:49

+0

您的意思是notify-send和firefox的完整路徑? – basicxman 2010-05-01 01:51:02

回答

2

通常您的cron腳本將在不同的用戶帳戶下運行,並且可能設置了不同的環境路徑。

嘗試設置命令行以使用命令的完整路徑,即。 /path/to/notify-send "x New Posts"

您可以使用which notify-send從您的常規終端獲取放入腳本的路徑。

您還可以從命令中獲取輸出來幫助調試。使用反引號操作符將返回輸出,因此您可以將其分配給變量和/或轉儲它。

$output = `$command`; 
error_log($output); 
1

當您在cron下運行腳本時,您沒有輸出tty或X-windows DISPLAY env-var。我懷疑這些命令正在運行但失敗。

+0

是的,我需要將它設置爲在X中運行。謝謝! – basicxman 2010-05-01 01:55:45

0

對以上關於cron的回答的評論:cron將以其用戶的crontab身份運行命令。所以,如果你設置了crontab,它將像你一樣運行命令。它會爲你在登錄時獲得的啓動腳本運行一些稍微不同的shell啓動腳本 - 它知道它沒有tty,所以它只執行〜/ .bashrc文件而不是配置文件集。檢查手冊頁的cron和bash的詳細信息