Problem strefy czasowej z cronem

11

Moje zadania cron są obliczane godzinę później w porównaniu do czasu serwera. Nie rozumiem co się dzieje.

Moja konfiguracja jest następująca:

Czas serwera :

Europe/Paris

W / etc / default / cron dodałem następujący wiersz:

TZ="Europe/Paris"

Mimo to zadanie cron jest uruchamiane godzinę później niż czas serwera. Naprawdę trudne jest to, że jeśli poproszę crona, aby zagrał w „date”, podaje serwerowi datę (dobrą!).

Nie mam pojęcia, jak rozwiązać ten problem; Czytałem na forach, ale nie znalazłem nic ciekawego.

Co myślisz ?

Guillaume Lebourgeois
źródło
4
Więc zadania crona są planowane w UTC. Strona podręcznika użytkownika Vixie cron mówi: „Demon użyje, jeśli jest obecna, definicji z / etc / timezone dla strefy czasowej”. Co jest w /etc/timezoneśrodku Czy zmodyfikowałeś /etc/timezonesię niedawno, zanim cronproces się rozpoczął? Próbowałeś /etc/init.d/cron restart?
Keith Thompson
3
/ etc / timezone został ostatnio zmodyfikowany, bez ponownego uruchamiania /etc/init.d/cron. Spróbuję go zrestartować.
Guillaume Lebourgeois,

Odpowiedzi:

16

(Kopiowanie mojego komentarza jako odpowiedzi, ponieważ okazało się, że jest to rozwiązanie; zgadłem.)

Tak więc zadania crona są planowane w UTC ( Europe/Parisz jednogodzinnym przesunięciem w stosunku do UTC).

Strona podręcznika użytkownika Vixie cron mówi:

Demon użyje, jeśli jest obecna, definicji z / etc / timezone dla strefy czasowej.

Co jest w /etc/timezoneśrodku Czy zmodyfikowałeś /etc/timezonesię niedawno, niż rozpoczął się proces cron? Czy próbowałeś

/etc/init.d/cron restart

?

Keith Thompson
źródło
3

Niektóre dystrybucje, takie jak Fedora, zapewniają mechanizm, w którym można ustawić CRON_TZ=przesłonięcie domyślnej strefy czasowej.

Z Fedory man 5 crontab

Zmienna CRON_TZ określa strefę czasową specyficzną dla tabeli cron. Użytkownik powinien wprowadzić do tabeli czas zgodnie z określoną strefą czasową. Czas użyty do zapisania w pliku dziennika jest pobierany z lokalnej strefy czasowej, w której działa demon.

Coś takiego:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash
slm
źródło
1

Wikipedia mówi

Większość implementacji crona po prostu interpretuje wpisy crontab w systemowej strefie czasowej, w której uruchamiany jest sam demon cron. Może to być źródłem sporów, jeśli duża maszyna z wieloma użytkownikami ma użytkowników w kilku strefach czasowych, szczególnie jeśli domyślna strefa czasowa systemu zawiera potencjalnie mylący czas letni. Zatem implementacja cron może w szczególnym przypadku dowolnych wierszy ustawień zmiennej środowiskowej „TZ =” w tabelach użytkownika interpretować kolejne wpisy tabeli crontab w odniesieniu do tej strefy czasowej

Więc może twój identyfikator logowania ma ustawienie TZ, które różni się od systemowego ustawienia TZ?

RedGrittyBrick
źródło
1

Potrzebowałem ponownie uruchomić crona, ale dla mnie było to polecenie

/etc/init.d/crond restart (crond not cron)
arx-e
źródło
0

Właśnie to odkryłem na Ubuntu 14/16. Działa idealnie dla mnie.

Kroki (implikowane sudo):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone
Varun Chandak
źródło
Gdzie cronzostanie ponownie uruchomiony?
DavidPostill
Nie musiałem restartować crona.
Varun Chandak