Una sostituzione cron che gestisce più fusi orari


8

Sto cercando un sostituto cron (o un metodo cron se possibile) che possa consentire la pianificazione di lavori in qualsiasi numero di fusi orari (in particolare più di uno per utente / file). Quello che vorrei è la possibilità di specificare un fuso orario per lavoro (o cron line), e quindi specificare solo gli orari nei fusi orari locali. Ho notato che posso cambiare l'intero fuso orario in cui viene eseguito cron, ma alla fine della giornata può funzionare solo in un fuso orario.

La mia attuale soluzione è quella di convertire tutti i miei orari in GMT ed eseguire i lavori di conseguenza, l'unico problema è durante le settimane di cambio dell'ora legale, molte modifiche manuali devono essere fatte per assicurarsi che le cose funzionino correttamente nel rispettivo fuso orario locale (ad esempio alcuni le regioni non seguono l'ora legale o non cambiano alla stessa data).

Qualche idea su questo?

Risposte:


3

Penso che tu stia provando ad avere entrambe le cose e la realtà è che non puoi proprio. Se vuoi che un lavoro venga eseguito alle 8:00 ora locale, ad esempio, indipendentemente dal fatto che l'ora legale sia attiva, esegui il tuo sistema (e cron) in ora locale e non esegui modifiche stagionali o lo esegui in UTC ( non GMT) e apportare modifiche stagionali. Se vuoi che i tuoi lavori vengano eseguiti nello stesso UTC, a prescindere , esegui cron in base a UTC e non c'è altro da fare.

Se quello che vuoi è che un utente sia in grado di pianificare un lavoro cron in base al suo fuso orario locale e di non dovergli pensare alle conversioni per sua comodità, allora scrivi uno script di conversione che accetta una specifica cron e un fuso orario quindi esegue la conversione in UTC dietro le quinte e modifica il crontab per lui. Potrebbe anche essere una conversione a due vie per gestire le modifiche alle voci esistenti.

Sarà utile se ci dici cosa stai effettivamente cercando di realizzare .


6

fcron supporta questa funzione.

Dalla documentazione dell'opzione "fuso orario" in fcrontab (5) :

Eseguire il lavoro nel fuso orario specificato. timezone-name è una stringa valida per la variabile di ambiente TZ: consultare la documentazione del proprio sistema per maggiori dettagli. Ad esempio, "Europa / Parigi" è valido su un sistema Linux. Questa opzione gestisce correttamente le modifiche dell'ora legale. La variabile di ambiente TZ è impostata sul valore del fuso orario quando viene eseguito un lavoro che definisce questa opzione.


fcronsembra essere piuttosto vecchio e non ha installazione predefinita in ubuntu. c'è un'altra soluzione?
silgon

Sembra che fcron sia stato rimosso da Debian nel 2011 a causa di "interruzioni e non aggiornate" :(
Peter Green,

3

Potresti scrivere un piccolo wrapper che richiede tre argomenti:

  • Ora del fuso orario target da abbinare
  • Fuso orario target
  • Comando da eseguire se l'ora target tz corrisponde all'ora corrente (in target tz).

Quindi inserisci quella linea di wrapper nel tuo crontab per eseguire ogni ora:

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

Versione semplice di 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)

0

Ti consiglio di utilizzare Coordinated Universal Time (UTC), non è influenzato dall'ora legale. Vedi le risposte a "cambio orario invernale ed estivo senza interruzione della sequenza temporale". . Questo è ciò che di solito è meglio anche per l'ora del sistema.


Suppongo di non aver chiarito abbastanza la mia domanda ... Il mio problema è che ho bisogno di lavori da eseguire alle 8:00 ora locale in una regione (diciamo Sudafrica / Johannesburg). Quando si verifica l'ora legale, l'offset UTC finirà per cambiare per tenere conto della nuova ora locale e richiederà una modifica manuale per tenerne conto. Ha senso o mi sto perdendo qualcosa qui?
Mgray,

Vedi quello che ha detto Dennis, ha ragione :-)
Kyle Brandt,


-1

Cfengine è il modo in cui lo facciamo. È possibile impostare i lavori utilizzando l'ora locale (che si adatta all'ora legale) o GMT per i lavori simultanei. Puoi creare qualsiasi tipo di calendario personalizzato, con eccezioni. So che puoi pagare una tonnellata di denaro per la programmazione del software, ma non abbiamo mai avuto bisogno di altro, anche con datacenter in 3 località in tutto il mondo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.