Zmień strefę czasową współdziałania

10

Mam cronjob, który jest wykonywany codziennie o 9:00 czasu UTC. Jestem w GMT + 1, więc wykonuje się o godzinie 10:00 czasu lokalnego. Gdy nastąpi zmiana strefy czasowej (na czas letni, DST), cronjob wykonuje się nadal o godzinie 9:00 czasu UTC, ale o godzinie 11:00 czasu lokalnego. Ale chcę, aby zawsze działało o godzinie 10:00, bez względu na czas letni lub nie. Jak mogę to zrobić?

qailburn
źródło
4
To pytanie jest krzyżowo zamieszczone na StackOverflow: stackoverflow.com/questions/29592533/…
John1024
Jaka jest twoja strefa czasowa na / etc / timezone?
Twinkles,

Odpowiedzi:

2

Sprawdź ustawienia w / etc / timezone. W pytaniu, o którym wspomniałeś, że jesteś w „GMT + 1”, jeśli taka jest twoja strefa czasowa, skrypt zawsze będzie wykonywany w UTC plus jedna godzina. Jeśli ustawisz na np. „Europa / Paryż”, czas wykonania zmieni się wraz z czasem letnim.

Migoczą
źródło
6

Będzie to prawdopodobnie zależeć od twojego systemu operacyjnego i jego implementacji cron. Nie jest to możliwe w najpopularniejszej implementacji crona, vixie/isc cron. Z crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.
Jordan
źródło
2

Rozwijając odpowiedź @Cyrus, zrobiłem to:

Zrobiłem skrypt sprawdzający przesunięcie UTC:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Następnie dodaję dwa wpisy crontab każdy dla żądanego przesunięcia:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here
Sukima
źródło
1

Ze strony podręcznika:

Demon użyje, jeśli jest obecna, definicji /etc/timezonestrefy czasowej.

Środowisko można zdefiniować na nowo w definicjach crontab użytkownika, ale cron będzie obsługiwał zadania tylko w jednej strefie czasowej.

w płomieniach
źródło
1

Przenieś cronjob do godziny 8:00 i śpij godzinę, jeśli jesteś w GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here
Cyrus
źródło
Co jeśli twój TZ to Ameryka Północna?
swdev,