Altera o fuso horário de um cronjob

10

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

    
por qailburn 12.04.2015 / 19:31

5 respostas

2

Verifique sua configuração em / etc / timezone. Na pergunta que você mencionou, você está em "GMT + 1", se é isso que seu fuso horário está definido, seu script sempre será executado em 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.

    
por 13.04.2015 / 11:00
6

Isso provavelmente dependerá do seu sistema operacional e da implementação de cron . Isso não é possível na implementação mais popular do cron, vixie/isc cron . Do 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.
    
por 12.04.2015 / 19:54
2

Expandindo a resposta do @Cyrus, foi isso que 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 desejado:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here
    
por 05.05.2016 / 14:51
1

Na página de manual:

The daemon will use, if present, the definition from /etc/timezone for the timezone.

The environment can be redefined in user's crontab definitions but cron will only handle tasks in a single time‐ zone.

    
por 12.04.2015 / 19:54
1

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

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
    
por 12.04.2015 / 20:41