Crontab w Linuksie – z przykładami i narzędziami w czasie rzeczywistym

Spis treści:

Przyjrzyjmy się bliżej crontab, jego poleceniom i różnorodnym operacjom, które można z nim wykonywać.

Zgłębimy tajniki planowania zadań za pomocą narzędzia cron, a na koniec przyjrzymy się kilku użytecznym narzędziom online, które wspomagają formatowanie i testowanie poleceń cron.

Wprowadzenie

Nazwa crontab to skrót od „cron table”, czyli „tabela crona”. Sam termin „cron” wywodzi się z greckiego słowa „Chronos”, oznaczającego czas. Crontab to w istocie demon systemowy, którego zadaniem jest automatyczne wykonywanie określonych zadań w zdefiniowanym czasie.

Zastosowania

Crontab okazuje się nieoceniony w wielu sytuacjach, takich jak automatyczne tworzenie kopii zapasowych, rotacja plików dziennika, synchronizacja danych między serwerami, czy też oczyszczanie folderów tymczasowych. Choć crontab można wykorzystać w różnorodnych zadaniach, jego potencjał w pełni objawia się w pracach związanych z administracją systemem.

Dzięki cronowi administrator ma możliwość zaplanowania uruchomienia konkretnego zadania o określonej godzinie i dniu, co znacząco automatyzuje i upraszcza wykonywanie powtarzalnych czynności.

Zobaczmy, jak można skonfigurować to potężne narzędzie.

Struktura Crontab

Cron, aby realizować zaplanowane zadania, analizuje pliki konfiguracyjne. Każdy wiersz w tych plikach jest interpretowany zgodnie ze składnią Crontab. W składni tej wyróżniamy sześć pól. Pierwsze pięć pól (1-5) definiuje datę i czas wykonania, natomiast ostatnie, szóste pole, może zawierać nazwę użytkownika oraz zadanie, polecenie lub skrypt do wykonania.

* * * * * POLECENIE/SKRYPT DO WYKONANIA NAZWA_UŻYTKOWNIKA

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Dzień tygodnia (0 – 6, gdzie 0 to niedziela, można też użyć nazw dni)
│ │ │ |____________ Miesiąc (1 – 12, * oznacza każdy miesiąc)
│ │ |______________ Dzień miesiąca (1 – 31, * oznacza każdy dzień)
│ |________________ Godzina (0 – 23, * oznacza każdą godzinę)
|___________________ Minuta (0 – 59, * oznacza każdą minutę)

Uwagi:

  • Symbol gwiazdki (*)
  • jest używany w celu wskazania wszystkich możliwych wartości danego pola. Na przykład, gwiazdka w polu godziny oznacza każdą godzinę, a w polu miesiąca – każdy miesiąc.

Nazwa użytkownika jest opcjonalna (występuje tylko w przypadku systemowego pliku crontab)

Przykłady:

Poniżej znajduje się kilka przykładów, które pomogą lepiej zrozumieć powyższą składnię:

0 5 * * * /scripts/job.sh

1. Uruchomienie skryptu `job.sh` codziennie o 5 rano.

0 6,18 * * * /scripts/job.sh

2. Uruchomienie skryptu `job.sh` dwa razy dziennie, o 6:00 i 18:00.

* * * * * /scripts/job.sh

3. Uruchomienie skryptu `job.sh` co minutę.

0 19 * * mon /scripts/job.sh

4. Uruchomienie skryptu `job.sh` w każdy poniedziałek o godzinie 19:00.

*/10 * * * * /scripts/job.sh

5. Uruchomienie skryptu `job.sh` co 10 minut.

* * * feb,jun,oct * /script/job.sh

6. Uruchomienie skryptu `job.sh` w lutym, czerwcu i październiku.

25 7 4 3 * /home/script/backup.sh

7. Uruchomienie skryptu powłoki `/home/script/backup.sh` 4 marca o godzinie 7:25.

8. Uruchomienie zadania cron co 30 sekund.

  • Ponieważ crontab nie daje bezpośredniej kontroli nad sekundami, osiągniemy to w dwuetapowym procesie.
* * * * * /home/scripts/script.sh
  • Najpierw zaplanujemy uruchamianie zadania co minutę.
* * * * * sleep 30; /home/scripts/script.sh

Następnie użyjemy polecenia `sleep`, aby zatrzymać wykonanie na 30 sekund.

Powyższe zadanie wstrzyma wykonanie na 30 sekund, po czym zostanie wznowione.

Rodzaje plików konfiguracyjnych Crona

Wyróżniamy dwa typy plików konfiguracyjnych Crona:

Systemowy plik crontab (UNIX/Linux)

Wymaga uprawnień administratora, ponieważ jest zazwyczaj wykorzystywany do obsługi usług systemowych i zadań o kluczowym znaczeniu. Szóste pole (w omówionej wcześniej składni) stanowi nazwę użytkownika, w imieniu którego ma zostać wykonane polecenie, umożliwiając systemowi crontab uruchamianie poleceń w kontekście dowolnego użytkownika.

Użytkownika plik crontab

Każdy użytkownik ma możliwość skonfigurowania własnych zadań cron za pomocą polecenia `crontab`. W tym przypadku szóste pole w składni crontab oznacza polecenie do wykonania, a wszystkie polecenia są uruchamiane z uprawnieniami użytkownika, który utworzył zadanie cron. Każdy użytkownik ma swój własny plik crontab, który choć fizycznie znajduje się w katalogu `/var/spool/cron/crontabs`, nie jest przeznaczony do bezpośredniej edycji. Do edycji i konfiguracji własnych zadań crona należy korzystać z polecenia `crontab`.

Jak to działa? Demon cron, działający w tle, co minutę sprawdza plik `/etc/crontab` oraz katalogi `/etc/cron.*/`. Przeszukuje również katalog `/var/spool/cron/`. Polecenia są wykonywane przez cron, gdy

pola minut, godziny i miesiąca są zgodne z aktualnym czasem, a przynajmniej jedno z pól dnia (dzień miesiąca lub dzień tygodnia) odpowiada aktualnemu dniowi.

Podstawowe polecenia

Wyświetlanie istniejących zadań Cron

crontab -l

Powyższe polecenie pozwala wyświetlić listę wszystkich zaplanowanych zadań bez konieczności bezpośredniego otwierania pliku konfiguracyjnego crontab.

[[email protected] ~]# crontab -l
no crontab for newsblog.pl
[[email protected] ~]#

W przypadku, gdy nie istnieją żadne zadania, polecenie zwróci informację:

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Jeśli użytkownik wcześniej dodał zadania cron, zostaną one wyświetlone w powyższym formacie.

Tabela cron jest specyficzna dla danego użytkownika, co oznacza, że aby zobaczyć listę zadań danego użytkownika, należy być zalogowanym jako ten użytkownik.

Wyświetlanie zadań Cron innego użytkownika

Aby wyświetlić listę zaplanowanych zadań innego użytkownika, należy użyć opcji `-u` (user) oraz `-l` (list).

`crontab -u inna_nazwa_użytkownika -l`

Przykład: `crontab -u newsblog.pl -l`

Dodawanie i modyfikacja wpisów Crontab

Aby edytować wpisy crontab, można użyć opcji `-e`, jak pokazano poniżej.

`crontab -e`

Powyższe polecenie otworzy edytor `vi`, w którym należy zdefiniować szczegóły zadania i zapisać plik. Po zapisaniu można zweryfikować konfigurację za pomocą polecenia `crontab -l`.

Dodawanie i modyfikacja wpisów Crontab dla konkretnego użytkownika

crontab -u another_username -e

Do edycji pliku crontab innego użytkownika można użyć poniższego polecenia:

Przykład: `crontab -u newsblog.pl -e`

Usuwanie wpisu Crontab

Użycie parametru `-r` z poleceniem `crontab` spowoduje usunięcie wszystkich zaplanowanych zadań bez dodatkowego potwierdzenia.

`crontab -r`

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete newsblog.pl's crontab?

Jeśli wymagane jest potwierdzenie przed usunięciem zadań, można użyć opcji `-i` łącznie z opcją `-r`, co spowoduje wyświetlenie monitu o potwierdzenie przed usunięciem pliku crontab danego użytkownika.

Specjalne ciągi Crontab

Oprócz omówionej wcześniej składni, crontab udostępnia osiem specjalnych ciągów, które nie tylko oszczędzają czas, ale również podnoszą czytelność.
Specjalny ciąg
Opis
`@reboot`
Wykonaj raz po uruchomieniu systemu.
`@yearly`
Wykonuj raz w roku, tj. `0 0 1 1 *`
`@annually`
Identyczne jak `@yearly`
`@monthly`
Wykonuj raz w miesiącu, tj. `0 0 1 * *`
`@weekly`
Wykonuj raz w tygodniu, tj. `0 0 * * 0`
`@daily`
Wykonuj raz dziennie, tj. `0 0 * * *`
`@midnight`
Identyczne jak `@daily`
`@hourly`

Wykonuj raz na godzinę, tj. `0 * * * *`

Przykłady zastosowania specjalnych ciągów Crontab

1. Zaplanowanie zadania na początku każdego roku:

`@yearly /scripts/greeting.sh`

Powyższe zadanie uruchomi skrypt powitalny na początku każdego roku.

2. Zaplanowanie zadania na początku każdego miesiąca:

`@monthly /scripts/cleanup.sh`

Powyższe zadanie uruchomi skrypt porządkujący na początku każdego miesiąca.

Podobnie można wykorzystać inne specjalne ciągi crontab do zadań wykonywanych w odstępach tygodniowych, dziennych i godzinowych.

Katalogi Crona

  • Administrator systemu może wykorzystać ogólnosystemowy harmonogram zadań cron, znajdujący się w predefiniowanych katalogach cron, takich jak:
  • `/etc/cron.d`
  • `/etc/cron.daily`
  • `/etc/cron.hourly`
  • `/etc/cron.monthly`

`/etc/cron.weekly`

Przykłady użycia Crontab w praktyce

Rozważmy kilka przykładów użycia crontab, z których często korzystają administratorzy systemów i specjaliści IT.

Usuwanie pustych plików i katalogów

`45 0 * * * newsblog.pl find /tmp -type f -empty -delete`

Powyższe polecenie cron wyszukuje puste pliki i katalogi w katalogu `/tmp` i usuwa je. To zadanie jest wykonywane codziennie o godzinie 0:45. Aby zadanie zostało wykonane, należy podać nazwę użytkownika. W powyższym przykładzie użytkownik `newsblog.pl` wykonuje operację cron.

Wykonanie wielu zadań za pomocą jednego crontab

`* * * * * /home/scripts/backup.sh; /home/scripts/script.sh`

Wiele zadań można oddzielić średnikiem (`;`) i przypisać do pojedynczego wpisu cron.

Narzędzia do formatowania i testowania Cron

Do tej pory omówiliśmy polecenia i składnię crontab. Jednak, jeśli nie jesteś administratorem systemu i konfiguracja cron nie jest Twoim codziennym zadaniem, zapamiętanie składni może okazać się trudne, a błędy są nieuniknione. Nie martw się, jest na to rozwiązanie.

Dostępnych jest wiele internetowych narzędzi do formatowania cron.

# 1. Generator zadań Cron Generator zadań Cron

to przyjazny dla użytkownika graficzny interfejs, który pozwala określić minuty, dni oraz ścieżkę skryptu, aby wygenerować odpowiednie wyrażenie cron.

Rozważmy przykład, w którym należy uruchamiać `/home/processMonitor.sh` co 5 minut od poniedziałku do piątku.

W tym celu można wykorzystać poniższą składnię, którą należy umieścić w crontab za pomocą polecenia
`crontab -e`

`0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh`

# 2. Easycron Easycron

to przydatny internetowy harmonogram zadań cron. Umożliwia stworzenie zadania poprzez podanie adresu URL, który ma zostać wywołany, oraz określenie czasu wykonania. Możliwe jest też dodanie wyrażenia cron ręcznie lub wybranie z opisowej formy. Istnieje również opcja ustawienia podstawowego uwierzytelniania HTTP jako dodatkowej warstwy bezpieczeństwa.

Ponadto Easycron umożliwia monitorowanie logów zadań cron, ustawianie powiadomień e-mail, śledzenie logów błędów oraz inne przydatne funkcje.

# 3. Generator Crontab Generator Crontab

to kolejne narzędzie, które ułatwia generowanie wpisów crontab. Umożliwia również zapisywanie danych wyjściowych cron do pliku lub wysłanie ich na adres e-mail.

# 4. Guru Crontab Guru Crontab

to prosty edytor wyrażeń cron online. Dodatkowo zapewnia możliwość monitorowania zadań cron. Wystarczy skopiować wygenerowane polecenie i umieścić je w definicji crontab. W przypadku niepowodzenia zadania lub braku jego uruchomienia, użytkownik otrzyma powiadomienie e-mail.

W powyższym przykładzie zadanie zostanie wykonane o godzinie 04:05, codziennie, każdego miesiąca i tygodnia.

# 5. Tester CRON Tester CRON

pozwala na testowanie zdefiniowanych dat i czasów zadań cron. W przypadku konieczności analizy istniejącej składni cron w celu rozwiązania problemu lub w celach testowych, narzędzie to jest niezwykle przydatne.

Wystarczy skopiować i wkleić wyrażenie cron do pola definicji, a następnie wybrać liczbę iteracji i kliknąć „Test”, aby wyświetlić daty, w których zadanie zostanie uruchomione.

Sprawdźmy wyrażenie cron: `4 3 */2 * *`, które powinno uruchamiać się o godzinie 03:04 (AM) co dwa dni. Weryfikacja za pomocą testera cron potwierdza poprawność działania.

Podsumowanie Mam nadzieję, że ten artykuł pomógł w lepszym zrozumieniu crontab i jego konfiguracji. Planowanie zadań za pomocą cron jest jedną z wielu umiejętności, którymi powinien posługiwać się administrator systemu Linux. Jeśli jesteś zainteresowany rozwijaniem swoich umiejętności, zapoznaj się z tym kursem.

.