2011-02-07 28 views

Respuesta

11

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.

2

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.

1

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í?

+1

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

1

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 -'); 

}