2011-02-07 3 views

Répondre

11

NO, Il n'y a pas de tels privilèges directs en PHP.

Mais (sur serveur dédié) vous pouvez écrire un script PHP pour lire le fichier /etc/crontab et analyser les informations pour vérifier si un Cron spécifique existe sur le serveur.

2

Vous pouvez essayer d'exécuter la commande crontab -l, qui devrait fonctionner à partir de PHP. Vous devrez peut-être qualifier le chemin d'accès complet, par exemple, /usr/bin/crontab -l, ce qui dépend de l'hôte. Cela renverra les entrées crontab pour l'utilisateur qui exécute la commande, ce qui est ce que vous voulez si la page PHP et les tâches cron s'exécutent sous le même utilisateur (de nombreux hôtes partagés utilisent des scripts setuid php ces jours-ci). Pour obtenir les entrées de crontab pour un autre utilisateur, vous devez disposer de droits super-utilisateur sur la plupart des systèmes, et crontab -l -u otheruser.

1

utilisant shell_exec() ou system() ou quelque chose comme ça pourrait résoudre le problème. Mais cela ne fonctionnera pas avec safe_mode activé.

et je pense que les hébergements partagés n'auront pas ces fonctionnalités activées.

@Nathan: /usr/bin/crontab -l ne retournerait-il pas le fichier crontab à l'utilisateur qui exécute le script? par exemple. www-data, wwwrun, apache ou autre chose?

+1

oui ... Je suppose que je suppose que la plupart des hôtes partagés ont des scripts PHP utilisateur en cours d'exécution setuid comme utilisateur, même que leurs emplois cron. Je vais modifier pour clarifier ma réponse. – Nathan

1

En plus de la réponse de Nathan:

Si vous pouvez exécuter exec() et la commande 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 -'); 

}