Czy crond obsługuje zmianę czasu letniego o +1 godzinę?

16

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.

LoukiosValentine79
źródło

Odpowiedzi:

18

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.

Anthon
źródło
2
Wow, wiedza z lat 80. - Czapki z głów!
Izaak
zasada kciuka: raz w roku twoje crony w tym przedziale godzin nie będą działać. raz w roku twoje crony będą działać dwa razy. następstwo: nie zawsze jest to prawdą. powiązane: przestań używać lokalnych stref czasowych!
tedder42
@ tedder42 proszę podać referencje, roszczenia są sprzeczne zarówno z dokumentacją, jak i faktycznym zachowaniem crona.
Anthon
Ta niepotwierdzona sprawa odnosi się do drugiej i trzeciej nad ranem i nie ma związku z pytaniem (które odnosi się do 2:30) po południu. Twoje referencje mogą być interesujące (stare) zachowanie, nie zgadza się z moim doświadczeniem. A uruchomienie serwera bez strefy czasowej ma swoje własne problemy.
Anthon
2

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:

  • Już nigdy nie będziesz musiał ręcznie dostosowywać zegara do zmian czasu letniego
  • Karty CRON będą przechowywane i wykonywane w czasie UTC
  • Jeśli plik, np. Dziennik, zostanie zapisany o 01:30 przed końcem czasu letniego, a inny o 01:20 po końcu czasu letniego, plik ten będzie nadal „nowszy” niż drugi, ponieważ znaczniki czasu pliku będą mieć czas UTC i właśnie przetłumaczone do wyświetlania na podstawie bieżącej strefy czasowej w czasie wyświetlania.

Aby uzyskać więcej informacji, wpisz man hwclockw terminalu.

Steve Barnes
źródło
2
Drobny nitpick. UTC nie jest „uniwersalną stałą czasową”. UTC oznacza uniwersalny czas
koordynowany