GNU/Linux >> Znalost Linux >  >> Linux

Náhrada cronu, která zvládá více časových pásem

Řešení 1:

fcron tuto funkci podporuje.

Z dokumentace volby "timezone" v fcrontab(5):

Spusťte úlohu v daném časovém pásmu.timezone-name je řetězec, který je platný pro proměnnou prostředí TZ:více podrobností naleznete v dokumentaci vašeho systému. Například „Evropa/Paříž“ platí v systému Linux. Tato možnost správně zpracovává změny letního času. Proměnná TZenvironment je nastavena na hodnotu časového pásma, když je spuštěna úloha definující tuto možnost.

Řešení 2:

Myslím, že se to snažíš mít oběma způsoby a realita je taková, že to prostě nejde. Pokud chcete, aby se úloha spouštěla ​​například v 8 hodin ráno místního času, bez ohledu na to, zda je aktivní letní čas, spusťte svůj systém (a cron) v místním čase a neprovádějte sezónní úpravy, nebo ji spustíte v UTC ( ne GMT) a provádějte sezónní úpravy. Pokud chcete, aby vaše úlohy běžely ve stejném UTC, bez ohledu , pak spustíte cron podle UTC a už není co dělat.

Pokud chcete, aby uživatel mohl naplánovat úlohu cronu podle svého místního časového pásma a nemusel myslet na konverze pro své pohodlí pak napíšete konverzní skript, který akceptuje specifikaci cronu a časovou zónu, poté provede konverzi na UTC v zákulisí a upraví crontab za něj. Mohlo by se dokonce jednat o obousměrnou konverzi pro zpracování změn existujících záznamů.

Bude užitečné, když nám řeknete, čeho se vlastně snažíte dosáhnout .

Řešení 3:

Můžete si napsat malý obal, který zabere tři argumenty:

  • Cílení na hodinu časového pásma, aby odpovídalo
  • Cílové časové pásmo
  • Příkaz ke spuštění, pokud cílová hodina tz odpovídá aktuální hodině (v cílové hodině tz).

Pak stačí dát tento řádek obalu do crontab, aby se spouštěl každou hodinu:

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

Jednoduchá verze pythonu:

#!/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. Přidat více časových pásem v Ubuntu Linux – postupovat podle tohoto postupu?

  2. Čtyři paralelní úkoly… Jak na to?

  3. Spustit příkaz, který je zastíněn aliasem?

  1. Ssh na více hostitelů a spustit příkaz?

  2. Jak nastavit úlohu cron, aby každou hodinu spouštěla ​​spustitelný soubor?

  3. Jak nastavím cron, aby spouštěl soubor pouze jednou v určitou dobu?

  1. Linux:Spusťte úlohu cron v popředí

  2. Povolení bash.sh ke spuštění cronu odepřeno

  3. Čas provedení více příkazů