C'è un modo per sapere se un cronjob esiste già con php?Come verificare se cronjob esiste con PHP?
Voglio che funzioni sulla maggior parte degli host, anche condivisi.
C'è un modo per sapere se un cronjob esiste già con php?Come verificare se cronjob esiste con PHP?
Voglio che funzioni sulla maggior parte degli host, anche condivisi.
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.
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
.
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?
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 -');
}
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