Wyrażenie cron to zwięzły sposób opisu harmonogramu cyklicznego uruchamiania zadania, używany w systemach uniksopodobnych od lat 70. Pięć pól rozdzielonych spacjami potrafi wyrazić praktycznie każdy regularny harmonogram.
Pięć pól wyrażenia
Standardowe wyrażenie cron ma postać minuta godzina dzień-miesiąca miesiąc dzień-tygodnia. Na przykład 30 14 * * 1 oznacza „o 14:30 w każdy poniedziałek" — gwiazdki oznaczają „dowolną wartość" dla dnia miesiąca i miesiąca.
Znaczenie ukośników i przecinków
Ukośnik po gwiazdce, jak w */15 * * * *, oznacza „co 15 jednostek" — w tym przypadku co 15 minut. Przecinek pozwala wymienić kilka konkretnych wartości, na przykład 0 9,18 * * * uruchamia zadanie dwa razy dziennie: o 9:00 i 18:00.
Dlaczego pole „dzień tygodnia" myli najczęściej
W standardowym cronie zarówno pole „dzień miesiąca", jak i „dzień tygodnia" mogą być jednocześnie ustawione na coś innego niż gwiazdka — w takim przypadku zadanie uruchamia się, jeśli spełniony jest przynajmniej jeden z dwóch warunków (logiczne LUB, a nie I), co jest sprzeczne z intuicyjnym oczekiwaniem większości osób.
Ta sama składnia, od crontaba po CronJob w Kubernetesie
Pół wieku po powstaniu w Uniksie dokładnie ta sama pięciopolowa składnia trafiła do obiektu CronJob w Kubernetesie — platformie bardzo popularnej w polskim sektorze outsourcingu IT i DevOps. Harmonogram taki jak 0 3 * * * w manifeście CronJob znaczy dokładnie to samo, co w klasycznym crontabie uniksowym z lat 80.
Do czego to się przydaje
- Odczytanie cudzego wyrażenia cron w konfiguracji serwera lub pipeline'ie CI/CD.
- Sprawdzenie poprawności napisanego harmonogramu przed wdrożeniem na produkcję.
- Zaplanowanie dokładnego czasu kolejnych kilku uruchomień zadania.
Czas letni/zimowy a cron
Jeśli harmonogram działa w strefie czasowej z przejściem na czas letni, zadanie zaplanowane na nieistniejącą godzinę (np. 2:30 w noc przestawiania zegarów do przodu) może nie uruchomić się tego dnia, a zadanie zaplanowane na godzinę, która powtarza się przy cofaniu zegarów, może uruchomić się dwukrotnie. Dlatego dla krytycznych zadań często wybiera się czas poza typowym oknem przejścia (np. północ lub 3-4 nad ranem) lub jawnie ustawia strefę czasową UTC.