Problema de fuso horário com cron

11

Meus trabalhos cron são calculados uma hora depois em comparação com o tempo do servidor. Eu não entendo o que está acontecendo.

Minha configuração é a seguinte:

Horário do servidor :

Europe/Paris

Em / etc / default / cron, adicionei a seguinte linha:

TZ="Europe/Paris"

Apesar disso, o trabalho cron é iniciado uma hora depois da hora do servidor. O que é realmente complicado, é que, se eu pedir ao cron para tocar a instrução "date", ela fornecerá a data do servidor (a boa!).

Não tenho ideia de como resolver esse problema; Eu tenho lido alguns nos fóruns, mas não achei nada interessante.

O que você acha ?

Guillaume Lebourgeois
fonte
4
Portanto, os trabalhos cron estão sendo agendados no UTC. A página do manual do Vixie cron diz: "O daemon usará, se presente, a definição de / etc / timezone para o fuso horário". O que há /etc/timezone? Você modificou /etc/timezonemais recentemente do que o cronprocesso foi iniciado? Você já tentou /etc/init.d/cron restart?
Keith Thompson
3
/ etc / fuso horário foi modificado recentemente, sem reiniciar o /etc/init.d/cron. Vou tentar reiniciar.
Guillaume Lebourgeois

Respostas:

16

(Copiar o meu comentário como resposta, uma vez que acabou por ser a solução; adivinhei.)

Portanto, os trabalhos cron estão sendo agendados no UTC ( Europe/Parisa uma hora de diferença do UTC).

A página de manual do cron Vixie diz:

O daemon usará, se presente, a definição de / etc / fuso horário para o fuso horário.

O que há /etc/timezone? Você modificou /etc/timezonemais recentemente do que o processo cron foi iniciado? Você tentou

/etc/init.d/cron restart

?

Keith Thompson
fonte
3

Algumas distribuições, como o Fedora, fornecem um mecanismo no qual você pode configurar CRON_TZ=para substituir seu fuso horário padrão.

Do Fedora man 5 crontab

A variável CRON_TZ especifica o fuso horário específico para a tabela cron. O usuário deve inserir um horário de acordo com o fuso horário especificado na tabela. O tempo usado para gravar em um arquivo de log é obtido no fuso horário local, onde o daemon está em execução.

Algo assim:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash
slm
fonte
1

Wikipedia diz

A maioria das implementações do cron simplesmente interpreta as entradas crontab na configuração de fuso horário do sistema sob a qual o próprio daemon cron é executado. Isso pode ser uma fonte de disputa se uma grande máquina multiusuário tiver usuários em vários fusos horários, especialmente se o fuso horário padrão do sistema incluir o horário de verão potencialmente confuso. Portanto, uma implementação cron pode especificar um caso especial de qualquer linha de configuração de variável de ambiente "TZ =" nas crontabs do usuário, interpretando as entradas subsequentes da crontab em relação ao fuso horário.

Então, talvez o seu ID de login tenha uma configuração TZ diferente da configuração do sistema TZ?

RedGrittyBrick
fonte
1

Reiniciar o cron era o que eu precisava, mas para mim o comando foi

/etc/init.d/crond restart (crond not cron)
arx-e
fonte
0

Acabei de descobrir isso no Ubuntu 14/16. Funcionou perfeitamente para mim.

Etapas (sudo implícitas):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone
Varun Chandak
fonte
Onde é cronreiniciado?
DavidPostill
Não precisei reiniciar o cron.
Varun Chandak