O trabalho do cron não inicia após uma alteração de fuso horário

13

Eu tentei eliminar muitos dos erros comuns,

  1. garantindo que os PATHs estejam disponíveis para cron

  2. existe uma linha final no final do arquivo crontab

  3. o fuso horário é configurado por:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

Executando dateno bash, recebo:

Tue Sep 17 15:14:30 SGT 2013

Para verificar se o cron está usando o mesmo horário,

* * * * * date >> date.txt

está fornecendo a mesma data em date.txt.

Este é o script que estou tentando executar:

event.sh:

#!/usr/bin/env bash
echo data > /root/data.txt

Usando crontab -e, a linha abaixo funciona,

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

No entanto, quando tentei outros argumentos, esperava que fosse executado às 14h:

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

ou

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

isso não funcionará mais. Parece que há um problema com o meu argumento da hora. Nada foi encontrado no /tmp/debug.logarquivo também.

SOLUÇÃO:

Acabou que eu tenho que reiniciar o serviço cron depois de fazer alterações no TZ.

adsisco
fonte
1
algum erro nos logs? você pode, por favor, tentar com o caminho absoluto em vez de ~/event.shtentar com/home/username/event.sh
Rahul Patil
1
também fazer pequenas modificações como* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
Rahul Patil
1
Você diz que o fuso horário está definido corretamente, mas você tem certeza absoluta disso? Tente adicionar uma entrada como * * * * * datee confirme que datemostra a hora esperada. Note que definir a variável de ambiente TZ de dentro do crontab pode não afetar o fuso horário como usado pelo cron daemon em si, mas vai afetar os processos lançados através de cron, por isso, se você definir TZ no seu crontab eu sugiro comentando-lo temporariamente e definindo o tempo usando fuso horário do relógio do sistema (provavelmente UTC se você está-boot único Linux, mas pode ser hora local) em seu lugar.
um CVn 17/09/13
1
Você está perdendo o objetivo, @adsisco. Estou pedindo que você remova qualquer diretiva TZ que possa estar no crontab e tente novamente. Isso fará com que a data seja executada com o mesmo TZ que o daemon cron, permitindo ver em que fuso horário o cron deseja que os campos de hora em. / Etc / localtime afetem apenas a exibição, não o relógio do sistema, e duvido que isso afete o cron. Ao fazer esse teste, podemos ter certeza de que seu problema não está relacionado de forma alguma aos fusos horários (o que sinceramente me parece).
um CVn 17/09/13
1
na verdade, acho que consertei apenas reiniciando o sistema ... poderia ser que eu tivesse que reiniciar o serviço cron depois de fazer alterações no TZ? @ MichaelKjörling. OBRIGADO! por me indicar possíveis problemas de fuso horário.
adsisco

Respostas:

7

Primeiro, as chances de você estar atingindo um bug que faz com que um campo seja considerado incorretamente parecem excepcionalmente baixas. É mais provável que seja um mal-entendido do que está acontecendo e do que o cron espera.

Nesse caso, descobrimos nos comentários à pergunta que provavelmente era um problema relacionado ao fuso horário. Para isso, você:

  • Adicione uma entrada como * * * * * dateao crontab
  • Remova (ou comente) qualquer atribuição de TZ do crontab

Isso força datea execução com a configuração de fuso horário do invocador, o que significa o daemon cron . Veja a saída; mostrará qual cron o fuso horário está usando internamente e, portanto, é altamente provável em qual fuso horário deseja seus campos de tempo. Se você tiver uma atribuição de TZ no crontab, é fácil que a atribuição de variável de ambiente de TZ seja transmitida para o comandos invocados, mas o cron também usa outro fuso horário . Ao comentar ou remover a atribuição TZ, você evita essa ambiguidade.

Observe também que quaisquer alterações nas configurações globais do fuso horário do sistema (incluindo / etc / localtime) quase certamente requerem pelo menos uma reinicialização do daemon cron e, possivelmente (embora improvável), uma reinicialização do sistema para ter efeito total. A edição da atribuição de TZ no crontab não deve exigir o recarregamento do daemon cron, pois deve detectar que o arquivo foi alterado e recarregá-lo automaticamente.

um CVn
fonte