2013-08-27 141 views
0

我試圖做一個「通用」的方式來設置cron作業,因爲我正在製作一個商業系統,它需要爲大家工作。使用php來設置cron作業

這是我在做什麼:

<?php 
$data = '0 0,12 * * * -q /public_html/currency.php '; 
file_put_contents('cron.txt', $data, FILE_APPEND); 
exec('sudo crontab cron.txt', $output, $return); 
if($return === 0) 
{ 
    echo 'Cron Successful'; 
    } else { 
    echo 'Cron Unsuccessful' . $output; 
} 
?> 

而且我得到一個錯誤:克朗UnsuccessfulArray

爲什麼會出現這個錯誤? cron.txt包含所有寫在$data中的所有內容。

+2

做一個'print_r($ output)'來看看它返回的實際消息 –

+0

這個實際消息是'Array()' –

+0

啊,那麼沒有(常規)輸出。看看你的命令 - 「sudo」會指望你輸入密碼,不是嗎?你不得不把這個插進去。(這不是一個非常好的做法,但我認爲你知道) –

回答

0

$output變量作爲一個PHP數組參考exec功能(http://php.net/manual/en/function.exec.php

施放此數組字符串傳遞,您可能需要使用像print_rhttp://www.php.net/manual/en/function.print-r.php)函數,如在下面的例子中:

if ($return === 0) { 
    $message = 'Cron Successful'; 
} else { 
    $message = 'Cron Unsuccessful' . print_r($output, true); 
} 

正如在評論中建議,出於安全考慮,不建議留在sudoers中的Web服務器用戶。

+0

是的,我已經完全刪除它,最終用戶只需添加一個cron作業。 –

0

首先你的問題:你沒有得到你想要的結果,因爲你實際上執行這個PHP代碼的用戶沒有(也非常幸運)具有sudo訪問權限。要「解決」這個問題,打開你的shell,而不是運行一個簡單的:php example.php,運行這個:sudo php example.php。這應該使它工作。

但是,我強烈建議您重新考慮您嘗試解決的問題。我看到你儘可能地自動化(好東西),也許可以使用shell腳本來設置你的環境。您甚至可以將該shell腳本存儲在您的git/svn存儲庫中。

+0

我試圖在安裝系統時爲最終用戶解除麻煩,但我決定附上一篇教程,指導如何添加一個cronjob,並將所有cron作業全部拖放到一個文件中,以使其更容易。我遠離shell腳本,因此在將來的更新中,我會重新考慮這一點。目前,用戶將不得不經歷自己添加1個cron任務的麻煩。 –