Pourquoi cette entrée cron est-elle exécutée deux fois?
-
05-07-2019 - |
Question
*/5 * * * * my command
Cette entrée fonctionne mais toutes les 5 minutes, elle est exécutée deux fois, pourquoi?
Dans / var / log / cron
, il est indiqué:
Jun 16 22:20:01 Test CROND[12512]: (root) CMD (my command)
Jun 16 22:20:01 Test CROND[12516]: (root) CMD (my command)
Donc, ce n'est pas à partir de deux utilisateurs.
Il n'est saisi qu'une seule fois avec crontab -e -u root
. La commande est une commande php.
La solution
Rien dans la description ne justifie son exécution deux fois. Regardez ailleurs.
- Deux utilisateurs l'appellent-ils?
- Est-ce entré deux fois?
- Est-ce que cela s'appelle lui-même?
- Cela crée-t-il des conditions de mouvement pour la répétition?
S'il s'agit d'un script shell que vous exécutez, faites-le ajouter whoami
et date
à un fichier journal. Vous devriez pouvoir trouver la raison.
MISE À JOUR
Tapez ps -A, assurez-vous que crond ne s'exécute pas deux fois.
Autres conseils
La limite de temps de travail dans crontab est de 15 minutes. Dans notre cas, c'était exactement le cas, et après ces 15 minutes, le travail se termine par un délai d'expiration, puis est relancé immédiatement. La solution à cela était donc d’installer la tâche cron dans crontab un peu comme ceci:
1 2 * * * root wget --read-timeout=3600 -O - 'http://cron-job-url' >/dev/null 2>&1
... au lieu de
1 2 * * * root wget -O - 'http://cron-job-url' >/dev/null 2>&1
Donc, wget est la chose. Sens 3600 = 1 heure alors. Ou plus si vous avez besoin!
S'il s'agit d'une commande pour une application que vous avez installée, elle a peut-être déjà ajouté la même entrée à / etc / crontab
ou /etc/cron.d/<something>
.
Je confirme - mon cron a également fonctionné deux fois ...
Jul 24 14:40:01 localhost cron[2713]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:41:01 localhost cron[9481]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:41:01 localhost cron[10724]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:42:01 localhost cron[20380]: (root) CMD (/etc/apache2/generator/reloader.do)
Jul 24 14:42:01 localhost cron[20832]: (root) CMD (/etc/apache2/generator/reloader.do)
Ma crontab
grep -R / var / spool / -e reloader
/var/spool/cron/crontabs/root:* * * * * /etc/apache2/generator/reloader.do
sortie de:
whoami
date
------
sortie:
root
root
Tue Jul 24 14:46:02 CEST 2012
---------
Tue Jul 24 14:46:03 CEST 2012
---------
La solution actuelle est la suivante:
if [ -f /etc/apache2/generator/reloader.lock ]
then
exit
fi
touch /etc/apache2/generator/reloader.lock
/etc/apache2/generator/reloader
rm /etc/apache2/generator/reloader.lock
Mais ce n'est pas la réponse pour laquelle cela se produit ...
Système - gentoo Cron - vixie-cron
partie de la sortie ps aux wwf
(prévue dans la tâche périodique)
root 10843 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 29797 0.0 0.0 25020 964 ? S 15:08 0:00 \_ /usr/sbin/cron
root 29799 0.0 0.0 9188 1228 ? Ss 15:08 0:00 \_ /bin/bash /etc/apache2/generator/reloader
root 29822 0.0 0.0 14800 988 ? R 15:08 0:00 \_ ps aux wwf
------
root 8215 0.0 0.0 16480 836 ? Ss 14:23 0:00 /usr/sbin/cron
root 31419 0.0 0.0 25020 968 ? S 15:08 0:00 \_ /usr/sbin/cron
root 31423 0.0 0.0 9188 1228 ? Ss 15:08 0:00 \_ /bin/bash /etc/apache2/generator/reloader
root 31431 0.0 0.0 14804 1004 ? R 15:08 0:00 \_ ps aux wwf
EDIT:
J'ai remarqué qu'un des rapports de processus cron du mois de juin 2006 était la date de début (nous sommes le 24 juin)
root 10843 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 8215 0.0 0.0 16480 836 ? Ss 14:23 0:00 /usr/sbin/cron
Le deuxième rapport de processus est correct (l’autonomie du serveur est d’environ 40 minutes - j’ai redémarré récemment) Une information importante - il s’agit du serveur V qui tourne sur la machine hôte.
Quoi que je fasse (/etc/init.d/vixie-cron restart), cela commence par le même PID
RESOLU:
J'ai trouvé la raison. Un serveur virtuel a été exécuté deux fois, avec un contexte différent. Explication possible - quelqu'un a changé le contexte pendant que la machine était en marche et, par conséquent, tous les processus n'ont pas été tués, et plus encore - ils ont affecté la nouvelle instance de vserver (contextes 303 et 3031):
root 10843 3031 developer 0.0 0.0 16480 560 ? Ss Jun06 0:01 /usr/sbin/cron
root 16509 303 developer 0.0 0.0 16480 836 ? Ss 15:18 0:00 /usr/sbin/cron
J'ai un ancien processus TERM et le problème est résolu.
Bien sûr, ce n’est pas l’entrée crontab qui le fait fonctionner deux fois. Le moyen le plus rapide de savoir ce qui se passe est d’ajouter du débogage au script de travail cron. Si vous ne faites rien, alors la sortie cron sera envoyée par défaut à root @ localhost
(sauf si vous l'avez configurée de manière différente). En supposant que vous ayez un accès root, ajoutez des informations de débogage au script. , tels que:
echo "Script starting"
date
whoami
et regardez la sortie. Cela vous aidera à savoir comment on appelle deux fois.
J'ai eu le même problème une fois, dans mon cas, j'ai initialisé le service cron deux fois par erreur. Après avoir arrêté cron # /etc/init.d/crond stop
et le redémarré # /etc/init.d/crond start
, cela a parfaitement fonctionné.
J'espère que cela peut aider n'importe qui.
On dirait que vous avez deux clients en marche, l'un avec le PID 12512 et l'autre avec le PID 12516.
J'utilise OpenWrt.
J'ai le même problème, mais je n'ai qu'un cron: ps | grep crond:
31447 root 1508 S /usr/sbin/crond -c /etc/crontabs -l 8
31454 root 1500 S sh -c ps | grep crond
31456 root 1496 S grep crond
logread | grep cron
May 27 13:15:01 decibox cron.info crond[31447]: crond: USER root pid 1594 cmd /root/check_connect.php.sh
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2103 cmd /root/check_connect.php.sh
May 27 13:20:01 decibox cron.info crond[31447]: crond: USER root pid 2325 cmd /root/check_connect.php.sh
May 27 13:25:01 decibox cron.info crond[31447]: crond: USER root pid 2880 cmd /root/check_connect.php.sh
J'ai eu le même problème en raison d'une double entrée dans le fichier de configuration:
# grep /syslog /etc/rsyslog.conf /etc/rsyslog.d/50-default.conf
/etc/rsyslog.conf:*.*;auth,authpriv,kern,mail.none -/var/log/syslog
/etc/rsyslog.d/50-default.conf:*.*;auth,authpriv,kern,mail.none -/var/log/syslog
Commenter clairement l'un des 2 résout le problème