Perché questa voce cron viene eseguita due volte?
-
05-07-2019 - |
Domanda
*/5 * * * * my command
Questa voce funziona ma ogni 5 minuti viene eseguita due volte, perché?
In / var / log / cron
mostra:
Jun 16 22:20:01 Test CROND[12512]: (root) CMD (my command)
Jun 16 22:20:01 Test CROND[12516]: (root) CMD (my command)
Quindi non proviene da due utenti.
Viene inserito una sola volta con crontab -e -u root
. Il comando è un comando php.
Soluzione
Nulla nella descrizione spiega perché sia ??eseguito due volte. Guarda altrove.
- Lo chiamano due utenti?
- È stato inserito due volte?
- Si chiama da solo?
- Si pone in condizioni di movimento per la ripetizione?
Se si sta eseguendo uno script shell, aggiungere whoami
e date
a un file di registro. Dovresti essere in grado di scoprire il motivo.
UPDATE
Digita ps -A, assicurati che crond non sia in esecuzione due volte.
Altri suggerimenti
La wget in crontab ha spesso un limite di 15 minuti. Nel nostro caso era proprio il caso, e dopo quei 15 minuti il ??lavoro termina con un timeout e quindi viene eseguito di nuovo immediatamente. Quindi, la soluzione a questo era di impostare il cronjob in crontab in qualche modo come questo:
1 2 * * * root wget --read-timeout=3600 -O - 'http://cron-job-url' >/dev/null 2>&1
... anziché
1 2 * * * root wget -O - 'http://cron-job-url' >/dev/null 2>&1
Quindi, wget è la cosa. Significato 3600 = 1 ora quindi. O più se ne hai bisogno!
Se è un comando per un'applicazione installata, forse ha già aggiunto la stessa voce a / etc / crontab
o /etc/cron.d/<something>
.
Confermo: anche il mio cron funziona due volte ...
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)
Il mio crontab
grep -R / var / spool / -e reloader
/var/spool/cron/crontabs/root:* * * * * /etc/apache2/generator/reloader.do
output di:
whoami
date
------
uscita:
root
root
Tue Jul 24 14:46:02 CEST 2012
---------
Tue Jul 24 14:46:03 CEST 2012
---------
La mia soluzione alternativa attuale è:
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
Ma non è la risposta al perché ciò accada ...
Sistema - gentoo Cron - vixie-cron
parte dell'output di ps aux wwf
(pranzo all'interno di cron task)
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:
Ho notato che uno dei cron process riporta Jun06 come data di inizio (oggi è Jun24)
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
Rapporto sul secondo processo correttamente (il tempo di funzionamento del server è di ~ 40 minuti - l'ho riavviato di recente) Un'informazione importante: è V-server in esecuzione sul computer host.
Indipendentemente da ciò che faccio (/etc/init.d/vixie-cron restart) inizia con lo stesso PID
RISOLTO:
Ho trovato il motivo. Un V-server è stato eseguito due volte, con un contesto diverso. Possibile spiegazione: qualcuno ha cambiato il contesto mentre la macchina era in esecuzione e, di conseguenza, non tutti i processi sono stati interrotti e, inoltre, hanno influenzato la nuova istanza di vserver (contesto 303 e 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
Ho terminato il vecchio processo e il problema è stato risolto.
Sicuramente non è la voce crontab a causarne l'esecuzione due volte. Il modo più veloce per scoprire cosa sta succedendo è aggiungere un po 'di debug allo script cron job. Se non fai nulla, per impostazione predefinita l'output cron verrà inviato a root @ localhost
(a meno che tu non abbia configurato questo per essere diverso), quindi supponendo che tu abbia accesso come root, aggiungi alcune informazioni di debug allo script , come ad esempio:
echo "Script starting"
date
whoami
e guarda l'output. Questo ti farà iniziare a capire come viene chiamato due volte.
Ho avuto lo stesso problema una volta, nel mio caso era che ho inizializzato il servizio cron due volte per errore. Dopo aver fermato cron # /etc/init.d/crond stop
e averlo riavviato # /etc/init.d/crond start
, ha funzionato perfettamente.
Spero che questo possa aiutare chiunque.
Sembra che tu abbia due crond in esecuzione, uno con PID 12512 e uno con PID 12516.
Uso OpenWrt.
Ho lo stesso problema, ma ho solo 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
Ho avuto lo stesso problema a causa di una doppia voce nel file conf:
# 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
Commentare chiaramente uno dei 2 risolve il problema