GNU/Linux >> Linux Esercitazione >  >> Linux

Una sostituzione di cron che gestisce più fusi orari

Soluzione 1:

fcron supporta questa funzione.

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

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

Soluzione 2:

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

Se quello che vuoi è che un utente sia in grado di pianificare un cron job in base al suo fuso orario locale e non debba pensare alle conversioni per sua comodità quindi 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 bidirezionale per gestire le modifiche alle voci esistenti.

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

Soluzione 3:

Potresti scrivere tu stesso un piccolo wrapper che accetta 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 metti quella riga wrapper nel tuo crontab per essere eseguita ogni ora:

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

Versione Python semplice:

#!/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)

Linux
  1. DSH – Esegui un comando Linux su più host alla volta

  2. Eseguire vere istanze di processo multiple di Gnome-terminal?

  3. Quattro compiti in parallelo... Come farlo?

  4. Come funzionano gli interni del demone Cron?

  5. Come eseguire un cron job all'interno di un contenitore docker

Come eseguire Cron Jobs ogni 5, 10 o 15 minuti

Come aggiungere più fusi orari in Linux

Come aggiungere più fusi orari in Ubuntu

Programmazione con cron &At

Esegui comandi con un limite di tempo in Ubuntu 20.04

Time il tempo di esecuzione di più comandi