2013-02-02 24 views
0

我想寫一個幫助刪除cron作業的函數,我已經嘗試了一些從網上的類,但它沒有工作,所以我自己寫它,它不能正確刪除命令的問題,它要麼刪除它,要麼刪除文件中存在的每個cron作業的一半!我的刪除cronjob php函數有什麼問題?

這裏是我的功能:

function delete_cronjob($command) 
{ 
    $outputs = array(); 
    exec('crontab -l',$outputs); 

    for($i=0;$i<count($outputs);$i++) 
    { 
     if ($outputs[$i]==$command) 
      $outputs[$i]=NULL; 
    } 

     shell_exec('crontab -r'); 
     for($i=0;$i<count($outputs);$i++) 
     { 
      if ($outputs[$i]!=NULL) 
      shell_exec('(crontab -l ; echo "'.$outputs[$i].'") |uniq - | crontab -'); 
     } 

}

這是那種cron作業的我用:

$command='0 0 * * * ssh -p 22 [email protected] "cd /home/sally/;./bckp_rstr.bash _ _ 0 1 test [email protected]:/home/sally/sal_bckp/ 192.168.0.121 22 1 "'; 
delete_cronjob($command); 

有什麼不對?

+0

這只是一個猜測,但也許嘗試在使用'escapeshellarg()'''''之前將'$ outputs [$ i]''傳遞給'shell_exec()'來轉義? –

+0

它沒有幫助。這是什麼 ?? – Sally

+0

'$ command'包含雙引號,並且在shell_exec()調用中用雙引號包裝。我的猜測是,這可能會導致一些問題,因爲報價沒有逃脫。 –

回答

0

如果它工作在系統上像它在礦(Fedora的),我會用file_put_contents建議只是,少得多出問題

我也存儲在數據庫中的cron作業,這樣我就可以將它們標記激活/不激活,只是傾倒出活動的 - 與一個字段的意見/描述它是什麼

它有覆蓋手動編輯任何crons的缺點,但我不傾向於這樣做。擁有可以被我們的服務器訪問的cron存儲的優勢 - 有一個字段說明哪些服務器是crons的 - 勝過這一點。這也意味着cron列表與其餘數據一起備份,並且如果需要的話可以輕鬆地推送到其他機器:)值得考慮。