2011-02-07 164 views

回答

11

NO,在PHP中沒有這樣的直接特權。

但(在專用服務器)你可以寫一個PHP腳本來讀取/etc/crontab文件並解析信息來檢查服務器上存在一個特定的cron。

2

您可以嘗試運行crontab -l命令,該命令應該可以從PHP工作。您可能必須限定完整路徑,例如/usr/bin/crontab -l,這取決於主機。

這將返回運行命令的用戶的crontab條目,如果PHP頁面和cron作業以相同用戶身份運行(許多共享主機最近使用setuid php腳本),那麼這就是您想要的。要獲得其他用戶的crontab條目,您需要在大多數系統上擁有超級用戶權限,並且需要crontab -l -u otheruser

1

使用shell_exec()system()或類似的東西可能解決問題。 但它不會與safe_mode打開。

我想共享主機不會啓用這些功能。

@Nathan:會不會/usr/bin/crontab -l返回運行腳本的用戶的crontab?例如www-data,wwwrun,apache什麼的?

+1

是的......我想我假設大多數的共享主機有用戶PHP腳本運行setuid爲用戶,與他們的cron作業相同。我會編輯以澄清我的答案。 – Nathan 2011-02-07 20:55:47

1

除了Nathan的回答:

如果你可以運行exec()crontab命令

function cronjob_exists($command){ 

    $cronjob_exists=false; 

    exec('crontab -l', $crontab); 

    if(isset($crontab)&&is_array($crontab)){ 

     $crontab = array_flip($crontab); 

     if(isset($crontab[$command])){ 

      $cronjob_exists=true; 

     } 

    } 

    return $cronjob_exists; 
} 

$command = '30 9 * * * '.__DIR__.'/cronjobs/job1.php'; 

if(cronjob_exists($command)===FALSE){ 

    //add job to crontab 
    exec('echo -e "`crontab -l`\n'.$command.'" | crontab -'); 

}