No meu servidor CentOS 7, os erros gerados por um script de backup noturno que deveria ter sido executado corretamente fizeram com que eu checasse minha atividade no cron. Descobri que cron.daily
está sendo executado duas vezes - aqui está a seção relevante de /var/log/cron
depois que eu removi meu script de backup para ver se de alguma forma estava causando o problema:
Oct 10 02:28:01 mail CROND[1750]: (root) CMD (run-parts /etc/cron.hourly)
Oct 10 02:28:01 mail run-parts(/etc/cron.hourly)[1750]: starting 0anacron
Oct 10 02:28:01 mail anacron[1759]: Anacron started on 2017-10-10
Oct 10 02:28:01 mail run-parts(/etc/cron.hourly)[1761]: finished 0anacron
Oct 10 02:28:01 mail anacron[1759]: Normal exit (0 jobs run)
Oct 10 02:30:01 mail CROND[1766]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 02:40:01 mail CROND[1847]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 02:50:01 mail CROND[1936]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:00:01 mail CROND[2032]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:10:01 mail CROND[2148]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:17:01 mail CROND[2223]: (root) CMD (run-parts /etc/cron.daily)
Oct 10 03:17:01 mail run-parts(/etc/cron.daily)[2223]: starting kizunademo
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2259]: finished kizunademo
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2223]: starting logrotate
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2266]: finished logrotate
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2223]: starting man-db.cron
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2277]: finished man-db.cron
Oct 10 03:20:01 mail CROND[2288]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:28:01 mail CROND[2367]: (root) CMD (run-parts /etc/cron.hourly)
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2367]: starting 0anacron
Oct 10 03:28:01 mail anacron[2376]: Anacron started on 2017-10-10
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2378]: finished 0anacron
Oct 10 03:28:01 mail anacron[2376]: Will run job 'cron.daily' in 35 min.
Oct 10 03:28:01 mail anacron[2376]: Jobs will be executed sequentially
Oct 10 03:30:01 mail CROND[2381]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:40:01 mail CROND[2462]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:50:02 mail CROND[2547]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 04:00:01 mail CROND[2670]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 04:03:01 mail anacron[2376]: Job 'cron.daily' started
Oct 10 04:03:01 mail run-parts(/etc/cron.daily)[2685]: starting kizunademo
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2721]: finished kizunademo
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2685]: starting logrotate
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2728]: finished logrotate
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2685]: starting man-db.cron
Oct 10 04:03:03 mail run-parts(/etc/cron.daily)[2739]: finished man-db.cron
Oct 10 04:03:03 mail anacron[2376]: Job 'cron.daily' terminated
Oct 10 04:03:03 mail anacron[2376]: Normal exit (1 job run)
Por que cron.daily
está sendo executado duas vezes? Como você pode ver, o log contém algumas entradas relacionadas à segunda execução que não estão presentes na primeira execução: duas linhas anunciando a próxima execução, e mais duas linhas dizendo que ela terminou com uma saída normal. A primeira execução simplesmente executou os scripts sem fanfarra extra. Eu suponho que significa alguma coisa, mas eu não sei o quê.
Eu verifiquei tudo que eu conseguia pensar em duplas de algo. Tenho certeza que li todos os tópicos semelhantes sobre o assunto, então compare com o seguinte antes de chamar isso de uma questão duplicada. Com base no Por que o cron está sendo executado duas vezes? Eu verifiquei processos extras - a saída completa de ps aux | grep cron
é o seguinte, portanto, há apenas um processo:
root 9383 0.0 0.2 112672 2340 pts/0 S+ 15:18 0:00 grep --color=auto cron
root 25624 0.0 0.0 126248 320 ? Ss Sep30 0:02 /usr/sbin/crond -n
Baseado em trabalhos Cron executando duas vezes - servidor Ubuntu 12.04 Também verifiquei crontab -l -u root
, que disse no crontab for root
.
E aqui está meu / etc / crontab:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
28 * * * * root run-parts /etc/cron.hourly
17 3 * * * root run-parts /etc/cron.daily
44 2 * * 0 root run-parts /etc/cron.weekly
8 2 7 * * root run-parts /etc/cron.monthly
Pensamentos?
EDIT (9 meses após esta discussão ter ficado em silêncio):
Comentário hoje de Marin Velikov me informou que existe um arquivo anacrontab
(eu sei que é bobagem, mas nem me ocorreu). Aqui está o seu conteúdo:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
Então essa é a causa. Mas por que o sistema seria configurado para rodar os dois? Eu assumo que alguém é mais esperto do que eu, então eu hesito em mexer com ele antes de saber o propósito. E se eu realmente me livrar das entradas em crontab
ou anacrontab
, qual é a melhor? Anacron é aparentemente a ferramenta mais sofisticada, mas parece estranho / errado esvaziar o crontab
. Eu sou muito velha?