Guides 3 min czytania

Nie przegap żadnego zadania: jak dopilnować, żeby zadania cron działały bez zakłóceń

Kopie zapasowe, importy i porządki działają w cronie i psują się po cichu. Najczęstsze przyczyny pominiętych zadań cron, jak je diagnozować i jak dostać alert, gdy zadanie się nie uruchomi.

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.

Darmowe narzędzie Objaśnienie wyrażeń cron

Czytaj dalej

Guides 8 min czytania

Wyrażenia cron w praktyce: składnia, przykłady i typowe błędy

Wyrażenie cron to pięć pól, które określają, kiedy uruchamia się zadanie. Składnia, znaki specjalne i skróty typu @daily, gotowe przykłady oraz błędy ze strefą czasową i PATH, przez które zadania przestają działać.

Czytaj

Guides 6 min czytania

Jak monitorować zadania cron za pomocą heartbeatów

Zadania cron zawodzą po cichu. Monitor heartbeat powiadomi Cię, gdy zaplanowane zadanie nie zgłosi się na czas. Jak działają heartbeaty, jak dodać je do crontaba i jakie ustawienia wybrać.

Czytaj

Przestoje to przeszłość.

Skonfiguruj pierwszy monitor w niecałą minutę albo najpierw rozejrzyj się w demo na żywo.

14 dni za darmo · Potem 5 monitorów gratis · Bez karty kredytowej