No meu servidor CentOS 7, erros gerados por um script de backup noturno que deveria funcionar bem me fizeram verificar minha atividade cron. Descobri que cron.daily
está sendo executado duas vezes - aqui está a seção relevante /var/log/cron
depois que 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 está cron.daily
executando 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 terminou com uma saída normal. A primeira execução simplesmente executou os scripts sem alarde extra. Presumo que isso signifique alguma coisa, mas não sei o quê.
Verifiquei tudo o que pude pensar em busca de duplicatas de alguma coisa. Tenho certeza de que li todos os tópicos semelhantes sobre o assunto, então compare com o seguinte antes de chamar isso de pergunta duplicada. Baseado em Por que o cron está rodando duas vezes? Verifiquei processos extras - a saída completa ps aux | grep cron
é a 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
Com base em trabalhos Cron rodando duas vezes - servidor Ubuntu 12.04 eu também verifiquei crontab -l -u root
, que dizia no crontab for root
.
E aqui está o 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 de hoje de Marin Velikov me fez saber que existe um anacrontab
arquivo (sei que é bobo, mas nem tinha me ocorrido). Eis 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 executar ambos? Presumo que alguém mais esperto do que eu o tenha configurado dessa maneira, então 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 um arquivo crontab
. Eu sou muito old-school?
crond
está executando uma vez:anacron
está executando uma vez:crond
beginanacron
, é por isso que você não viu um processo para isso:Acabei de encontrar essa mesma situação em um de nossos servidores. De acordo com o cara com quem conversei, o anacron é mais destinado a PCs individuais que podem ser desligados durante a noite, em vez de servidores que teoricamente funcionam 24 horas por dia, 7 dias por semana; o anacron procura por trabalhos que podem ter sido perdidos enquanto uma máquina foi desligada. A máquina em que encontrei isso era um servidor do tipo 24 horas por dia, 7 dias por semana, e o arquivo /etc/anacrontab estava apenas (re)executando cron.daily, cron.weekly e cron.monthly. Eu removi o anacron do servidor que encontrei estava fazendo isso e espero que isso resolva.