como executar tarefas cron no GMT, não no horário local?


8

Como posso executar tarefas cron no GMT, e não na hora local?

este é o meu arquivo crontab:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

meus trabalhos parecem estar em execução no horário local (GMT + 11) Estou executando o OS X Snow Leopard, mas passarei o código para o Linux quando o desenvolvimento estiver concluído.

O ambiente linux pode ser um ambiente compartilhado, onde eu posso ter menos controle sobre a configuração.



Respostas:


8

Nem todas as versões cronsuportam a execução de trabalhos usando um fuso horário diferente do sistema.

Se o seu for o caso, é provável que a especificação seja TZ=GMTou TZ=UTC(sem os colchetes angulares). Em alguns casos, a variável seria CRON_TZ.

A melhor coisa a fazer é verificar a documentação específica para o sistema específico. Veja man 5 crontab.


3

Se a sua hora local é Europe/London. Então:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Outro exemplo:

Se o seu horário normal é +0500turno de UTC, e o horário sazonal é +0600turno de UTC. Em seguida, adicione +5todas as horas especificadas no exemplo acima. Isso significa ser executado na 08:15ame no 09:15amhorário local, respectivamente. Portanto, suas linhas cron modificadas ficariam assim:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[EDIT] Não se esqueça de \escapar de qualquer porcentagem de %caracteres no seu arquivo crontab. Como o crontab os interpreta como um separador de nova linha. por exemplo %-> \%.


1
não haverá problemas se você estiver no fuso horário que usa DST-lo (por exemplo) o seu fuso horário é às vezes +01: 00 e somethimes +02: 00
inemanja

2
Talvez você possa elaborar? Acho que não. Já contabilizamos o horário de verão. Cada caso tem sua própria linha cron. 1 para cada um com / sem horário de verão.
precisa

esta deve ser a resposta aceita, pois permite comandos individiul comportamentos diferentes
Patrick McCann

0

Talvez você possa quebrar o binário crond original.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

olá hlovdal, você poderia explicar esses passos?
olho composto

Você está copiando crond para crond.real e, em seguida, substituindo crond por um script curto, no qual você define e exporta TZ, e executa crond.real?
olho composto

Não copiando, mas movendo, mas sim, o restante da sua análise está correto.
hlovdal
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.