¿Hay alguna manera de saber si ya existe un cronjob con php?¿Cómo comprobar si cronjob existe con PHP?
Quiero que funcione en la mayoría de los alojamientos, incluso compartidos.
¿Hay alguna manera de saber si ya existe un cronjob con php?¿Cómo comprobar si cronjob existe con PHP?
Quiero que funcione en la mayoría de los alojamientos, incluso compartidos.
NO, No existe tal privilegio directo en PHP.
Pero (El servidor dedicado) se puede escribir un script PHP para leer /etc/crontab
archivo y analizar la información para comprobar si existe un cron específico en el servidor.
Puede intentar ejecutar el comando crontab -l
, que debería funcionar desde PHP. Es posible que tenga que calificar la ruta completa, por ejemplo, /usr/bin/crontab -l
, que dependerá del host.
Esto devolverá las entradas de crontab para el usuario que ejecuta el comando, que es lo que desea si la página PHP y las tareas cron se ejecutan como el mismo usuario (muchos hosts compartidos usan scripts setuid php en estos días). Para obtener las entradas de crontab para otro usuario, necesitaría derechos de superusuario en la mayoría de los sistemas, y crontab -l -u otheruser
.
usando shell_exec()
o system()
o algo así podría resolver el problema. Pero no funcionará con safe_mode
encendido.
y creo que los alojamientos compartidos no tendrán habilitadas estas funciones.
@Nathan: ¿no devolvería /usr/bin/crontab -l
el crontab al usuario que ejecuta el script? p.ej. www-data, wwwrun, apache o algo así?
Además de la respuesta de Nathan:
Si puede ejecutar el comando exec()
y 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í ... supongo que estoy asumiendo anfitriones más comunes han scripts PHP usuario que ejecuta setuid como el usuario, lo mismo que sus trabajos cron. Editaré para aclarar mi respuesta. – Nathan