2011-02-07 21 views

risposta

11

NO, Non esiste un tale privilegio diretto in PHP.

Ma (Il server dedicato) è possibile scrivere uno script PHP per leggere /etc/crontab file e l'analizza le informazioni per verificare se un cron specifica esiste sul server.

2

Si potrebbe provare a eseguire il comando crontab -l, che dovrebbe funzionare da PHP. Potrebbe essere necessario qualificare il percorso completo, ad esempio /usr/bin/crontab -l, che dipenderebbe dall'host.

Ciò restituirà le voci crontab per l'utente che esegue il comando, che è ciò che si desidera se i lavori di pagina e cron di PHP vengono eseguiti come lo stesso utente (molti host condivisi utilizzano script php setuid al giorno d'oggi). Per ottenere le voci crontab per un altro utente è necessario disporre dei diritti di superutente sulla maggior parte dei sistemi e crontab -l -u otheruser.

1

utilizzando shell_exec() o system() o qualcosa del genere risolvere il problema. Ma non funzionerà con safe_mode attivato.

e penso che gli hosting condivisi non abbiano queste funzionalità abilitate.

@Nathan: non sarebbe /usr/bin/crontab -l restituire il crontab per l'utente che esegue lo script? per esempio. www-data, wwwrun, apache o qualcosa del genere?

+1

sì ... mi sa che sto assumendo host più comuni sono gli script PHP utente in esecuzione setuid come il utente, come i loro lavori cron. Modificherò per chiarire la mia risposta. – Nathan

1

Oltre alla risposta di Nathan:

Se è possibile eseguire exec() e il comando di 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 -'); 

}