Zadania cron wykonują cichą pracę za kulisami stron i serwerów: kopie zapasowe, aktualizacje, importy, faktury, rozgrzewanie cache i porządki. Gdy działają, nikt tego nie zauważa. Gdy przestają działać – też nie, dopóki nie zabraknie kopii zapasowej albo faktury nie zostaną wystawione.
Dlaczego zadania cron są ważne
Cron uruchamia polecenia automatycznie o stałych porach lub w stałych odstępach. Oszczędza to czas i eliminuje ryzyko, że ktoś zapomni o zadaniu. Oznacza też, że krytyczna praca, jak nocne kopie zapasowe, zależy od harmonogramu, który nikomu nie mówi, gdy coś pójdzie nie tak.
Najczęstsze przyczyny pominiętych zadań cron
Niedostępność serwera. Jeśli o zaplanowanej porze serwer jest wyłączony albo się restartuje, zadanie się nie wykona.
Błędy składni. Jedno złe pole w wyrażeniu harmonogramu może sprawić, że zadanie uruchomi się o złej porze albo wcale.
Błędna konfiguracja. Niewłaściwy użytkownik, zły katalog roboczy albo zadanie dodane do crontaba, który nigdy nie jest wczytywany.
Różnice w środowisku. Cron działa w minimalnym środowisku. Polecenie, które działa w Twojej powłoce, może zawieść w cronie, bo brakuje PATH albo innych zmiennych.
Nakładanie się i przekroczenia czasu. Zadanie, które trwa dłużej niż jego interwał, może zderzyć się z kolejnym uruchomieniem. Maksymalny czas wykonania ustawiony w monitorze zadania powie Ci, kiedy uruchomienie trwa za długo.
Wykrywanie i diagnozowanie błędów
Zacznij od logów. Log systemowy (często /var/log/syslog albo log crona w Twojej dystrybucji) pokazuje, czy cron uruchomił zadanie. Wyjście samego zadania pokazuje, co działo się dalej.
Typowe błędy i ich znaczenie:
command not found: używaj ścieżek bezwzględnych albo ustaw PATH na początku crontaba.
permission denied: sprawdź uprawnienia plików i to, jako który użytkownik działa zadanie.
syntax error: sprawdź wyrażenie harmonogramu i cudzysłowy w poleceniu.
Przekieruj wyjście do pliku logu, żeby awarie zostawiały ślad:
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Monitorowanie zadań cron
Logi pomagają tylko wtedy, gdy ktoś je czyta. Monitoring zamienia cichą awarię w alert. Najpewniejszy sposób to heartbeat: po zakończeniu zadanie wysyła żądanie na adres URL monitoringu. Jeśli żądanie nie dotrze w oczekiwanym czasie, dostajesz alert.
W monitorach cron w Uptimecheck zadanie wywołuje unikalny adres URL metodą GET lub POST. Monitor przyjmuje harmonogram crontaba w Twojej strefie czasowej, przyjmuje pingi startu i zakończenia w jednym monitorze, wysyła alert, gdy uruchomienie przekroczy maksymalny czas wykonania, i może zapisywać kod wyjścia oraz wyjście zadania. Gdy brakuje pingu, alert trafia na e-mail, do Slacka, Microsoft Teams, Discorda, Google Chat, Mattermost, Telegrama, PagerDuty, ntfy, Pushovera, na webhook albo jako powiadomienie push na telefon, w każdym planie. Instrukcję krok po kroku znajdziesz w artykule Jak monitorować zadania cron.
Dobre praktyki planowania
Ciężkie zadania planuj poza godzinami szczytu.
Rozkładaj w czasie zadania, które korzystają z tych samych zasobów, zamiast uruchamiać wszystkie o północy.
Używaj blokady (np. flock), żeby wolne uruchomienie nie nałożyło się na kolejne.
Przeglądaj harmonogramy, gdy zmienia się Twoja aplikacja.
Cron na kilku serwerach
Gdy to samo zadanie istnieje na kilku serwerach, zdecyduj, gdzie ma działać, i dopilnuj, żeby uruchamiało się raz. Pomaga centralne planowanie albo blokada we współdzielonym magazynie. Daj każdemu zadaniu osobny heartbeat, żeby wiedzieć, który serwer pominął uruchomienie.
Zabezpieczanie zadań cron
Zadania cron często mają dostęp do baz danych, kopii zapasowych i danych uwierzytelniających.
Ogranicz, kto może edytować crontaby.
Nie umieszczaj sekretów w samej linii crontaba – trzymaj je w chronionych plikach albo w konfiguracji środowiska.
Regularnie przeglądaj zadania i usuwaj te, których już nie potrzebujesz.
Oszczędne korzystanie z zasobów
Uruchamiaj zadania tylko tak często, jak to konieczne, i utrzymuj polecenia w prostej formie. Raport, którego nikt nie czyta co godzinę, może powstawać raz dziennie.
Przetestuj, zanim zaczniesz na tym polegać
Uruchom nowe zadanie ręcznie jako ten sam użytkownik, sprawdź wyjście i dopiero wtedy je zaplanuj. Od razu dodaj heartbeat, żeby już od pierwszej nocy wiedzieć, czy zadanie się wykonało.
Podsumowanie
Zadania cron są niezbędne i niewidoczne – i właśnie dlatego trzeba je monitorować. Usuń najczęstsze przyczyny awarii, loguj wyjście i dodaj heartbeat do każdego ważnego zadania.
Wypróbuj Uptimecheck za darmo przez 14 dni, bez karty kredytowej.