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.
Ne serait '/ path/to/fichier' contiennent quelque chose d'unique à crons? comme '/ mon chemin/vers/crons'? – delboy1978uk
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? –
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. –