Alterar o fuso horário de um cronjob


10

Eu tenho um cronjob que é executado todos os dias às 9:00 da hora UTC. Estou no GMT + 1, então ele é executado às 10:00 no horário local. Quando há a alteração do fuso horário (para horário de verão, horário de verão), o cronjob ainda é executado às 9:00 da hora UTC, mas às 11:00 da hora local. Mas quero que seja sempre executado às 10:00, independentemente do horário de verão ou não. Como faço isso?


4
Esta pergunta é postada cruzada no StackOverflow: stackoverflow.com/questions/29592533/…
John1024

Qual é o seu fuso horário definido em / etc / timezone?
Twinkles

Respostas:


2

Verifique sua configuração em / etc / fuso horário. Na pergunta que você mencionou, você está em "GMT + 1"; se é assim que seu fuso horário está definido, seu script sempre será executado no UTC mais uma hora. Se você definir como, por exemplo, "Europa / Paris", o tempo de execução mudará com o horário de verão.


6

Isso provavelmente dependerá do seu sistema operacional e da sua implementação cron. Isso não é possível na implementação cron mais popular vixie/isc cron,. De crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.

2

Expandir a resposta do @Cyrus foi o que eu fiz:

Eu fiz um script que verificou um deslocamento UTC:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Em seguida, adiciono duas entradas crontab para o deslocamento que desejo:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here

1

Na página do manual:

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

O ambiente pode ser redefinido nas definições de crontab do usuário, mas o cron só manipula tarefas em um único fuso horário.


1

Mova seu cronjob para 8:00 e durma uma hora se estiver no GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

E se o seu TZ for a América do Norte?
swdev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.