2017-09-14 1 views
0

Nous avons beaucoup de cronjobs sur notre serveur et nous cherchons un moyen de les gérer.Obtenez tous les cronjobs qui exécutent actuellement linux

Beaucoup de fonctionnalités sont couvertes mais une chose est encore en cours, c'est une façon de lister tous les cronjobs en cours d'exécution.

Ce qui suit fait le genre de travail de:

class Cronjob{ 

static private function stringToArray($jobs = '') { 
    $array = explode("\n", trim($jobs)); // trim() gets rid of the last \r\n 
    foreach ($array as $key => $item) { 
     if ($item == '') { 
      unset($array[$key]); 
     } 
    } 
    return $array; 
} 


static public function getAllJobsRunning(){ 
    $output = shell_exec("ps -ef | grep apache"); 
    return self::stringToArray($output); 
} 
} 

Mais cela revient plus de tâches et non seulement les cronjobs comme

apache 6018 6015 0 Sep12 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND 
apache 6022 6015 0 Sep12 ? 00:00:08 /usr/sbin/httpd -DFOREGROUND 
apache 6023 6015 0 Sep12 ? 00:00:07 /usr/sbin/httpd -DFOREGROUND 
apache 7022 6015 0 14:14 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND 
root 8544 8485 0 14:41 pts/1 00:00:00 su apache 
apache 8545 8544 0 14:41 pts/1 00:00:00 bash 
apache 8642 8640 0 14:43 ? 00:00:00 /bin/sh -c /usr/bin/php /path_to_file/something.php > /var/log/cronlog/dailylogs.log 2>&1 
apache 8643 8642 0 14:43 ? 00:00:04 /usr/bin/php /path_to_file/something.php 
apache 11132 15438 0 14:58 ? 00:00:00 sh -c ps -ef | grep apache 
apache 11133 11132 0 14:58 ? 00:00:00 ps -ef 
apache 11134 11132 0 14:58 ? 00:00:00 grep apache 
apache 11454 6015 0 Sep12 ? 00:00:06 /usr/sbin/httpd -DFOREGROUND 
apache 15438 6015 0 11:29 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND 
apache 17761 6015 0 11:51 ? 00:00:01 /usr/sbin/httpd -DFOREGROUND 
apache 18274 6015 0 Sep13 ? 00:00:06 /usr/sbin/httpd -DFOREGROUND 
root 18911 11790 0 12:04 pts/0 00:00:00 su apache 
apache 18912 18911 0 12:04 pts/0 00:00:00 bash 
apache 21863 6015 0 12:42 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND 
apache 24419 6015 0 Sep13 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND 
apache 24436 6015 0 Sep13 ? 00:00:02 /usr/sbin/httpd -DFOREGROUND 

Alors im seulement intéressé par l':

apache 8642 8640 0 14:43 ? 00:00:00 /bin/sh -c /usr/bin/php /path_to_file/something.php > /var/log/cronlog/dailylogs.log 2>&1 
apache 8643 8642 0 14:43 ? 00:00:04 /usr/bin/php /path_to_file/something.php 

Maintenant, je pourrais écrire une regex qui filtre les lignes que je veux, mais je me demande s'il n'y a pas un moyen plus facile à faire ce.

+0

Ne serait '/ path/to/fichier' contiennent quelque chose d'unique à crons? comme '/ mon chemin/vers/crons'? – delboy1978uk

+0

Hmm oui, c'est le cas. Je pourrais en effet vérifier avec cette information, mais je me demande s'il n'y a pas une commande qui retourne juste les cronjobs. Par exemple, je pensais que je pouvais créer un utilisateur séparé qui exécute simplement les cronjobs de sorte que demander des tâches pour les utilisateurs ne retournera que cronjobs. Mais peut-être existe-t-il d'autres meilleures solutions? –

+0

Non, 'ps' répertorie les processus en cours d'exécution sans indiquer si le processus a été démarré en tant que démon, cronjob ou par utilisateur. Ce que vous pouvez faire est de comparer une liste des tâches cron définies depuis crontabs avec les processus en cours. L'utilisation d'un utilisateur distinct pour les tâches cron peut fonctionner, mais vous perdrez la flexibilité d'attribuer des autorisations différentes aux différents cronjobs. –

Répondre

-1

Vous voulez juste la liste des cronjobs sheduled ou réellement l'activité?

Utilisez les commandes suivantes au lieu de ps -ef | grep apache si vous voulez répertorier tous les shedules.

Obtenez le crontab pour tous les utilisateurs:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done 

Obtenez le crontab pour un utilisateur spécifique

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done 
+0

En fait l'activité –

+0

Vous devrez comparer les tâches en cours avec les tâches que vous tirez du crontab avec les commandes que j'ai données. Il n'y a pas d'autre moyen de les distinguer. –