Zadania cykliczne: cron i podstawy systemd timers
Nauczysz się planować proste zadania przez cron, sprawdzać usługę crond oraz rozpoznawać i diagnozować podstawowe timery systemd.
Wróć do listy lekcji1. Krótka teoria
Automatyzacja zadań cyklicznych pozwala regularnie wykonywać kopie, raporty i prace porządkowe. Użytkownik zarządza swoim harmonogramem przez crontab -e, a listę wpisów sprawdza przez crontab -l. Typowy wpis ma pięć pól czasu: minutę, godzinę, dzień miesiąca, miesiąc i dzień tygodnia, po których następuje polecenie. Gwiazdka oznacza każdą wartość, przecinek listę, myślnik zakres, a zapis z ukośnikiem krok. Cron uruchamia polecenia w ograniczonym środowisku, dlatego warto używać pełnych ścieżek do programów i plików, ustalać katalog roboczy oraz kierować standardowe wyjście i błędy do kontrolowanego logu. W Rocky Linux za wykonywanie zadań odpowiada usługa crond, a jej zdarzenia można sprawdzać w journalu. Systemd timers stanowią nowocześniejszy mechanizm powiązany z jednostkami service. Timer opisuje termin, a odpowiadająca mu usługa wykonuje pracę. systemctl list-timers pokazuje poprzednie i następne uruchomienie, a status oraz journal pomagają w diagnozie. Timery mogą korzystać z zależności systemd, czytelnych logów i opcji uruchomienia pominiętego zadania po wyłączeniu maszyny. Niezależnie od mechanizmu należy najpierw przetestować polecenie ręcznie i unikać zadań, których kolejne uruchomienia nakładają się lub niszczą dane.
2. Przykłady komend
crontab -l
Wyświetla wpisy crona aktualnego użytkownika.
$ crontab -l
crontab -e
Otwiera harmonogram aktualnego użytkownika do bezpiecznej edycji.
$ crontab -e
*/5 * * * * /usr/bin/date >> /tmp/cron-date.log 2>&1
Uruchamia date co pięć minut i zapisuje wyjście oraz błędy.
*/5 * * * * /usr/bin/date >> /tmp/cron-date.log 2>&1
systemctl status crond
Sprawdza stan usługi wykonującej zadania cron.
$ systemctl status crond
journalctl -u crond --since "1 hour ago"
Pokazuje zdarzenia crond z ostatniej godziny.
$ journalctl -u crond --since "1 hour ago"
systemctl list-timers --all
Wyświetla aktywne i nieaktywne timery wraz z terminami.
$ systemctl list-timers --all
systemctl status dnf-makecache.timer
Pokazuje stan przykładowego timera systemd.
$ systemctl status dnf-makecache.timer
systemctl cat dnf-makecache.timer
Wyświetla definicję timera i jego ustawienia czasu.
$ systemctl cat dnf-makecache.timer
journalctl -u dnf-makecache.service -n 30
Pokazuje logi usługi uruchamianej przez przykładowy timer.
$ journalctl -u dnf-makecache.service -n 30
3. Zadanie praktyczne
/usr/bin/date. Następnie dodaj przez crontab -e wpis uruchamiający to polecenie co pięć minut i zapisujący wynik do /tmp/cron-date.log. Sprawdź wpis przez crontab -l, stan crond oraz po kilku minutach zawartość pliku wynikowego. Jeśli zadanie nie działa, przeanalizuj journalctl -u crond --since "15 minutes ago". Potem wyświetl systemctl list-timers --all, znajdź dnf-makecache.timer i sprawdź jego status, definicję oraz logi powiązanej usługi. Po ćwiczeniu usuń wyłącznie dodany przez siebie wpis z crontaba.
4. Typowe błędy
- Niepoprawna kolejność pięciu pól czasu w crontabie użytkownika.
- Używanie względnych ścieżek i zakładanie takiego samego środowiska jak w terminalu.
- Brak przekierowania wyjścia i błędów, przez co zadanie trudno diagnozować.
- Dodawanie zadania bez wcześniejszego ręcznego przetestowania polecenia.
- Mylenie crontaba użytkownika z /etc/crontab, który zawiera dodatkowe pole użytkownika.
- Sprawdzanie tylko timera systemd bez logów uruchamianej jednostki service.
- Planowanie częstych zadań bez uwzględnienia nakładania się kolejnych uruchomień.
5. Podsumowanie
crontab -e edytuje harmonogram użytkownika, a pięć pól określa czas wykonania. Zadania cron powinny używać pełnych ścieżek i zapisywać błędy. Stan crond oraz jego journal pomagają w diagnozie. Systemd timer określa harmonogram, a powiązana jednostka service wykonuje pracę; oba elementy trzeba sprawdzać osobno.