W ostatni weekend musieliśmy zmienić czas z 02:00 na 03:00.
Pytanie: Co by się stało, gdyby cronjob odbywał się o 02:30?
crond jest bardzo starym rozwiązaniem do planowania, prawdopodobnie powinno to obsłużyć, ale nie wiem jak.
Prawdopodobnie zależy to od implementacji crona, ale popularny vronie cron stwierdza w instrukcji:
cron następnie budzi się co minutę, sprawdzając wszystkie zapisane tabele, sprawdzając każde polecenie, aby sprawdzić, czy powinno ono zostać uruchomione w bieżącej minucie.
i
Szczególne uwagi dotyczą zmiany zegara o mniej niż 3 godziny, na przykład na początku i na końcu czasu letniego. Jeśli czas przesunął się do przodu, zadania, które byłyby uruchomione w czasie, który został pominięty, zostaną uruchomione wkrótce po zmianie. I odwrotnie, jeśli czas cofnął się o mniej niż 3 godziny, zadania, które mieszczą się w powtarzanym czasie, nie zostaną ponownie uruchomione.
Wpływa to tylko na zadania uruchamiane w określonym czasie (nieokreślone jako @hourly ani z * w specyfikatorze godziny lub minuty). Zadania określone za pomocą symboli wieloznacznych są natychmiast uruchamiane na podstawie nowego czasu.
Ponieważ zmiana czasu letniego trwała krócej niż 3 godziny, Twój program uruchomi się wkrótce po 3:00 rano
Nie jestem pewien, czy jest to zachowanie specyficzne dla Vixie cron, wydaje mi się, że tak właśnie wyglądał mój PDP-11 w latach 80., ale nie jestem pewien.
Najlepszym rozwiązaniem jest uruchomienie komputera z zegarem sprzętowym ustawionym na UTC, (uniwersalny czas koordynowany), AKA GMT lub Zulu Time i zmiana sposobu wyświetlania czasu tylko poprzez ustawienie lokalnej strefy czasowej, aby umożliwić Oszczędzanie światła w ciągu dnia czas na przejęcie.
W systemie SUSE Linux i prawdopodobnie w większości innych, jeśli sprzętowy system zegara -> Środowisko -> Zegar -> HWCLOCK jest ustawiony na UTC z flagą -u, a strefa czasowa jest ustawiona w miejscu, w którym się znajdujesz, system automatycznie wyświetla czas lokalny z korektami DST dla Ciebie.
Ma to wiele zalet:
Aby uzyskać więcej informacji, wpisz
man hwclock
w terminalu.źródło