Uma substituição de cron que lida com vários fusos horários

8

Estou procurando uma substituição de cron (ou um método no cron, se possível) que pode permitir o agendamento de trabalhos em qualquer número de fusos horários (especificamente mais de um por usuário / arquivo). O que eu gostaria é a capacidade de especificar um fuso horário por trabalho (ou linha cron) e, em seguida, apenas especificar horários em fusos horários locais. Percebo que posso alterar todo o cron do fuso horário, mas no final do dia ele só pode ser executado em um fuso horário.

Minha solução atual é converter todos os meus tempos para GMT e executar trabalhos de acordo, o único problema é durante as semanas de mudança de horário de verão, muitas edições manuais devem ser feitas para garantir que as coisas funcionem corretamente no respectivo fuso horário local ( por exemplo, algumas regiões não seguem o horário de verão ou não mudam na mesma data).

Alguma opinião sobre isso?

    
por mgray 09.11.2009 / 19:35

6 respostas

3

Eu acho que você está tentando ter as duas coisas e a realidade é que você simplesmente não pode. Se você quiser que um trabalho seja executado às 8h, por exemplo, independentemente de o horário de verão estar ativo, execute o sistema (e o cron) na hora local e não faça edições sazonais ou execute-o no UTC ( não GMT) e fazer edições sazonais. Se você quer que seus trabalhos sejam executados no mesmo UTC, independentemente , então você executa o cron de acordo com o UTC e não há mais nada a fazer.

Se o que você deseja é que um usuário possa agendar um cron job de acordo com o fuso horário local e não precisar que ele tenha que pensar em conversões para sua conveniência , você escreve um script de conversão que aceita uma especificação cron e um fuso horário, então faz a conversão para UTC nos bastidores e edita o crontab para ele. Pode até ser uma conversão bidirecional para lidar com alterações nas entradas existentes.

Será útil se você nos disser o que realmente está tentando realizar .

    
por 09.11.2009 / 20:17
6
O

fcron suporta este recurso.

A partir da documentação da opção "fuso horário" em fcrontab (5) :

Run the job in the given time zone. timezone-name is a string which is valid for the environment variable TZ: see the documentation of your system for more details. For instance, "Europe/Paris" is valid on a Linux system. This option handles daylight saving time changes correctly. The TZ environment variable is set to the value of timezone when a job defining this option is run.

    
por 11.11.2010 / 23:55
3

Você pode escrever um pequeno wrapper com três argumentos:

  • Hora do fuso horário de destino para corresponder
  • Fuso horário segmentado
  • Comando para executar se a hora tz do destino corresponder à hora atual (no destino tz).

Em seguida, basta colocar essa linha de wrapper no seu crontab para ser executada por hora:

python tz_wrapper.py 14 "US/Mountain" "echo 'hi'"

Versão simples de python:

#!/usr/bin/python
import sys, os, datetime
import pytz

arg_hour = sys.argv[1]
arg_timezone = sys.argv[2]
arg_cmd = sys.argv[3]

target_tz = pytz.timezone(arg_timezone)
target_hour = pytz.utc.localize(datetime.datetime.utcnow()).astimezone(target_tz).strftime("%H")

if target_hour == str(arg_hour):
    os.system(arg_cmd)
    
por 09.11.2009 / 20:55
0

Eu recomendo que você use Tempo Universal Coordenado (UTC), mas isso não é afetado pelo horário de verão . Consulte as as respostas para "inverno e horário de verão sem uma pausa na linha do tempo. ". Isto é o que geralmente é melhor para a hora do sistema também.

    
por 09.11.2009 / 19:44
0

Existe um port de launchd do darwin para o FreeBSD que fará tudo o que você quiser se estiver no FreeBSD.

link

E há jobd, que é para * BSD e Linux.

link

    
por 12.04.2018 / 00:06
-1

O Cfengine é a maneira como fazemos isso. Você pode configurar trabalhos usando o horário local (que se adapta ao horário de verão) ou o GMT para trabalhos simultâneos. Você pode criar qualquer tipo de calendário personalizado, com exceções. Eu sei que você pode pagar uma tonelada de dinheiro para programar software, mas nunca precisávamos de nada além disso, mesmo com centros de dados em três locais ao redor do mundo.

    
por 24.01.2010 / 20:20