Jak zaplanować zadania w systemie Linux za pomocą Cron i Crontab?

Jak zaplanować zadania w systemie Linux za pomocą Cron i Crontab?

Czy wiedziałeś, że Łowca Ostrzy toczy się w 2019 roku? To za trzy lata! Nie wspominając Powrót do przyszłości 2 , gdzie przenoszą się w czasie do 2015 roku. Nie mamy jednak latających samochodów i nie ma wśród nas replikantów (o ile wiem).





Łatwo jest poczuć się rozczarowanym obecną technologią, gdy porównamy ją z fikcyjnymi przedstawieniami przyszłości. Jednak w dzisiejszych czasach nasze telefony, komputery, a nawet domy potrafią robić niesamowite rzeczy. Jednym z nich jest możliwość automatyzacji zadań.





Każdy użytkownik Linuksa może skorzystać z planowania zadań, niezależnie od tego, czy są one związane z systemem (takie jak czyszczenie starych logów i aktualizacja pakietów ) lub obsługi użytkownika (sprawdzanie poczty, pobieranie podcastów...). Użytkownicy systemu Windows mieli Harmonogram zadań od systemu Windows 95. Narzędzie, które wykonuje tę samą pracę w systemie Linux, nazywa się cron i tutaj wyjaśnimy, jak z niego korzystać.





najlepsza darmowa aplikacja do edycji zdjęć na iPhone'a

Co to jest Cron?

Cron to usługa systemowa, która działa w tle, sprawdza zaplanowane zadania i wykonuje je, jeśli jakieś znajdzie. Zadania – zwane również „zadaniami cron” – są zdefiniowane w specjalnych plikach konfiguracyjnych (crontabs), które cron skanuje co minutę. Kilka wersji crona można znaleźć w różnych dystrybucjach Linuksa. Na przykład widelec crona Fedory nazywa się kumpel , a są też fcron , bcron , oraz dcron . Niektóre mają dodatkowe funkcje, podczas gdy inne są bardziej skoncentrowane na bezpieczeństwie, ale wszystkie opierają się na tym samym pomyśle.

Ten przewodnik jest napisany dla vixie-cron, który jest najbardziej rozpowszechnioną wersją crona i tą, którą znajdziesz w Ubuntu i jego pochodnych. Chociaż większość instrukcji dotyczy również innych implementacji crona, mogą występować niewielkie różnice, więc sprawdź ich podręczniki, jeśli zdecydujesz się na zmianę.



Co to jest Crontab?

Jeśli poważnie myślisz o zarządzaniu czasem, prawdopodobnie masz jakiś kalendarz — aplikację lub przynajmniej kartkę papieru. Crontab jest bardzo podobny do kalendarza komputera. Przechowuje informacje o zaplanowanych zadaniach, mówiąc cronowi, które polecenia uruchomić o której godzinie.

W rzeczywistości w twoim systemie znajduje się kilka crontabów. Każdy użytkownik ma swoją własną tabelę crontab, w tym root (administrator). Crontab użytkownika są przechowywane w





/var/spool/cron/crontabs/

. ten

crontab -l

polecenie wyświetli plik crontab dla bieżącego użytkownika. Możesz sprawdzić crontab roota za pomocą





sudo crontab -l

.

Dodatkowo jest systemowy plik crontab

/etc/crontab

który jest używany do zadań ogólnosystemowych. Zwykle przybierają one formę wykonywalnych skryptów, których właścicielem jest root, umieszczanych w

/etc/cron.hourly/

,

/etc/cron.daily/

,

/etc/cron.weekly/

, oraz

/etc/cron.monthly/

folderów, a w niektórych dystrybucjach

/etc/cron.d/

folder również. Ogólnie rzecz biorąc, nie powinieneś mieć do czynienia z tymi zadaniami, ponieważ większość z nich jest tworzona automatycznie przez zainstalowane aplikacje.

Jak zaplanować zadania za pomocą Cron

Brzmi prosto: aby zaplanować zadania, po prostu dodaj je do swojego pliku crontab. Ponieważ crontab jest specjalnym plikiem konfiguracyjnym, nie zaleca się jego ręcznej edycji. Zamiast tego użyj

crontab -e

Komenda. Aby edytować crontab roota lub innych użytkowników, uruchom polecenie z uprawnieniami administratora i dodaj ich nazwę użytkownika po opcji -u:

sudo crontab -u root -e
sudo crontab -u username -e

Plik crontab ma dwie sekcje. Pierwsza zawiera zmienne środowiskowe, które są ustawiane automatycznie. Możesz bezpiecznie zmieniać zmienne PATH, HOME i SHELL oraz modyfikować zmienną MAIL.

Druga część pliku to rzeczywisty „plan zajęć” z zaplanowanymi zadaniami. Każde zadanie zajmuje wiersz (wiersz) w tabeli, z kolumnami reprezentującymi następujące wartości:

Aby skutecznie planować zadania, musisz wiedzieć trochę o składni crontab:

  • Liczby powinny być liczbami całkowitymi (całkowitymi) i możesz użyć gwiazdki (*) w dowolnej kolumnie jako symbolu wieloznacznego, co oznacza „co minutę/dzień/miesiąc...”.
  • W kolumnie „Dzień miesiąca” należy uważać, aby nie ustawić daty, która nie przypada w miesiącu podanym w kolumnie „Miesiąc” (np. 30 lutego).
  • W kolumnach „Miesiąc” i „Dzień tygodnia” są akceptowane nazwy skrócone odpowiednio dla miesięcy i dni, a wielkość liter nie jest rozróżniana.
  • W kolumnie „Dzień tygodnia” zarówno 0, jak i 7 oznaczają niedzielę. Kolumna „Godzina” wymaga formatu „czas wojskowy” (24-godzinny), ale nie można użyć liczby 24 -- zamiast tego 0 oznacza 12 rano. Dzieje się tak, ponieważ wartości minut, godziny i dnia tygodnia zaczynają się na 0 zamiast 1.
  • Sekundy nie są obsługiwane, więc nie możesz zaplanować zadania na konkretną sekundę.

To, co możesz zrobić, to zaplanować włączające zakresy czasu za pomocą łącznika (14-22 w „Godzinach” uruchomi zadanie nieprzerwanie od 14:00 do 22:00) lub uruchomić jedno zadanie kilka razy, definiując listę oddzieloną przecinkami (1, 3,5 pod „Dzień tygodnia” uruchomi zadanie w poniedziałek, środę i piątek).

Tymczasem wartości kroków są reprezentowane przez ukośnik (/), które wskazują liczbę pominięć w zakresie; na przykład 3-20/3 w „Godzinach” będzie uruchamiać zadanie co trzy godziny od 3:00 do 20:00. Jest to przydatne, gdy chcesz powtarzać zadania co X godzin, ponieważ możesz połączyć gwiazdkę i krok (*/X). Możesz łączyć zakresy z listami i kroki z zakresami, o ile używasz liczb. Innymi słowy, kombinacje takie jak „sty-mar” lub „wt, pt-nie” są niedozwolone.

Alternatywnie, zamiast ustawiać wartość dla każdej kolumny, możesz po prostu napisać @weekly, @yearly, @monthly, @codziennie lub @hourly na początku wiersza, a następnie polecenie. Zaplanowane w ten sposób zadania będą uruchamiane w pierwszej możliwej instancji, więc @weekly będzie uruchamiane o północy pierwszego dnia tygodnia. Jeśli chcesz uruchomić zadanie natychmiast po ponownym uruchomieniu systemu, użyj polecenia @reboot.

W tym przykładzie zaplanowaliśmy tworzenie kopii zapasowej codziennie o 08:20 i 20:20. Tapeta zmienia się automatycznie co trzy dni o godzinie 19:00, a skrypt sprawdza dostępność nowych podcastów w każdy poniedziałek o 10:20 i 20:20. Przypomnienie o urodzinach jest ustawione na 25 marca i jest uruchamiane co 30 minut w określonym przedziale czasowym. Wreszcie skrypt sprawdza pocztę co 15 minut od 8 do 20, ale tylko w dni robocze. Możesz dowolnie organizować swoją crontab za pomocą spacji i tabulatorów między kolumnami, ale nie w ich obrębie (nie umieszczaj spacji między przecinkami, myślnikami i ukośnikami).

Jeśli to wszystko brzmi zbyt skomplikowanie, nie martw się — zawsze możesz polegać na Internecie. Narzędzia takie jak Generator Crontab , Crontab.guru , a Corntab pomaga tworzyć zadania cron bez znajomości składni crontab. Pokazują, kiedy zadanie zostanie uruchomione jako następne, i dostarczają szablony dla często używanych wyrażeń. Crontab.guru jest najlepszy, ponieważ umożliwia testowanie składni crontab na żywo, dzięki czemu możesz od razu zobaczyć, jak Twoje zmiany wpłyną na harmonogram.

Jak sprawdzić, czy zadania Cron są wykonywane?

Cron ma działać cicho w tle i pozwalać na niezakłóconą pracę podczas wykonywania zadań. Ale jak możesz się upewnić, że to naprawdę działa?

Cron ma wbudowaną funkcję powiadomień e-mail, ale wymaga to skonfigurowania przynajmniej prostego lokalnego serwera pocztowego. Niewielu użytkowników domowych chce to skonfigurować i niewiele dystrybucji zapewnia to domyślnie (na przykład Ubuntu tego nie robi). Najszybszym sposobem sprawdzenia crona jest przeskanowanie dziennika systemowego za pomocą tego polecenia:

cat /var/log/syslog | grep -i cron

Opcja -i sprawia, że ​​nasze zapytanie nie uwzględnia wielkości liter. Możliwe, że cron będzie miał swój własny plik dziennika gdzieś w

/var/log/

, więc spójrz tam, jeśli to polecenie nie przyniesie użytecznych wyników.

Jeśli chcesz zapisać dane wyjściowe konkretnego zadania cron, możesz przekierować je do pliku. Podaj ścieżkę i nazwę pliku w ostatniej kolumnie twojego crontab, po poleceniu, które chcesz uruchomić:

30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt

Użycie pojedynczego symbolu > spowoduje nadpisanie pliku przy każdym uruchomieniu polecenia. Aby tego uniknąć, użyj zamiast tego >> -- dołącza dane wyjściowe do istniejącego pliku.

Co jeśli Cron nie działa?

Może się zdarzyć, że dodałeś jakieś zadania, sprawdziłeś logi systemowe i stwierdziłeś, że nie działają tak, jak powinny. Oto kilka rzeczy, które należy wziąć pod uwagę i zachować ostrożność, próbując rozwiązać problem.

Czy usługa cron działa?

Jak wiesz, demon cron powinien działać w tle. Upewnij się, że tak jest naprawdę. Usługa nazywa się crond lub po prostu cron.

Dla dystrybucji używających systemd:

systemctl status cron

W przypadku dystrybucji korzystających z programu Upstart:

service cron status

Jeśli twoja dystrybucja używa „starego” podejścia z inicjalizacji Systemu V, wypisz wszystkie usługi z:

airpody 1. generacji kontra 2. generacji
initctl list

i zobacz, czy crona jest na liście.

Czy możesz w ogóle mieć plik crontab?

Sprawdź swój

/etc

folder na pliki o nazwie

cron.allow

oraz

cron.deny

. W Ubuntu żadne z nich nie powinno istnieć, co oznacza, że ​​wszyscy użytkownicy mogą zarządzać zadaniami cron. Jeśli jednak istnieje

jak przekazać SMS-a na iPhonie?
cron.allow

plik, musi zawierać twoją nazwę użytkownika. I odwrotnie, jeśli

cron.deny

plik istnieje, Twoja nazwa użytkownika nie powinna się w nim znajdować. Pozostawienie

cron.deny

pusty plik oznacza, że ​​tylko root i użytkownicy wymienieni w

cron.allow

może mieć pliki crontab.

Czy twoje zmienne są ustawione prawidłowo?

Crontab automatycznie ustawia zmienną SHELL na

/bin/sh

. Jeśli jednak twoją skorupą jest ryba lub bash, należy zmienić zmienną SHELL

. Podobnie zmienna PATH zawiera domyślnie tylko kilka katalogów. Tutaj crontab szuka poleceń Linuksa. Jeśli twoje zadanie cron nie działa, może to być spowodowane tym, że crontab nie „widzi” polecenia, którego użyłeś. Aby tego uniknąć, dodaj katalogi zawierające polecenia do zmiennej PATH, oddzielone dwukropkami:

PATH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Jeśli nie chcesz tego edytować w crontab, możesz zdefiniować te zmienne w skrypcie, który chcesz uruchomić jako zadanie cron.

Czy formatowanie crontab jest na miejscu?

Składnia Crontab nie jest do końca płynna. Nawet jeśli zweryfikujesz to za pomocą wspomnianych wcześniej narzędzi online, drobny błąd może nadal uniemożliwić cronowi wykonanie twoich zadań. Uważaj, aby:

  • dodaj pustą linię na końcu pliku crontab
  • pomiń znak % ukośnikiem odwrotnym, jeśli twoje polecenie go zawiera
  • pisz komentarze w oddzielnych wierszach zaczynając od #. Nie pisz komentarzy w tym samym wierszu co zmienne środowiskowe lub obok poleceń zadania cron.

Czy naprawdę musisz korzystać z terminala?

Absolutnie nie. Użytkownicy KDE mogą planować zadania crona za pomocą KCron, który jest dostępny z Ustawienia systemowe > Harmonogram zadań moduł. Dzięki prostemu interfejsowi, który pozwala wybrać i dostosować wszystko za pomocą zaledwie kilku kliknięć myszką, KCron jest przyjemnością w użyciu.

Jeśli wolisz GNOME, to Harmonogram GNOME jest dla Ciebie. Podejście jest podobne, choć interfejs jest prawdopodobnie nieco inny. Oferuje zaawansowany tryb do drobnych modyfikacji i jest wyposażony w aplet panelu, z którego można bezpośrednio zarządzać zadaniami.

Powinieneś być świadomy innych rozwiązań, takich jak Crontab-UI oraz Minikrona . Są bardziej odpowiednie dla użytkowników, którzy zarządzają wieloma komputerami i zadaniami cron, a jedną z ich najfajniejszych funkcji jest interfejs sieciowy.

Czy są jakieś alternatywy dla Crona?

Chociaż cron jest w zasadzie standardowym harmonogramem zadań dla Linuksa, z pewnością nie jest jedynym. ten na polecenie jest idealny do szybkich, jednorazowych zadań, które można zaplanować bezpośrednio z wiersza poleceń, bez specjalnych plików konfiguracyjnych. Jeśli potrzebujesz więcej, jest GNUbatch , który wprowadza pojęcie zależności. Dzięki GNUbatch możesz ustawić określone warunki dla każdego zadania lub uzależnić zaplanowane zadanie od poprzedniego. Coś podobnego można osiągnąć za pomocą liczniki systemowe . Chociaż konfiguracja jest mniej praktyczna niż cron, liczniki systemowe mogą zapamiętać, czy zadanie nie spełniło swojego harmonogramu, gdy komputer był wyłączony, i uruchomić je przy następnym włączeniu.

To jest coś, czego cron nie może zrobić sam. W związku z tym jest odpowiedni dla serwerów i komputerów, które są stale uruchomione, ale nie wykona zadania, które zostało zaplanowane, gdy komputer był wyłączony. To jest gdzie anakron wchodzi w grę. Technicznie nie jest to „alternatywa” ani zamiennik crona. Zamiast tego anacron uzupełnia cron i powinien być używany razem z nim, co ma miejsce w wielu dystrybucjach Linuksa, w tym w produktach opartych na Ubuntu i Ubuntu. Anacron rejestruje, kiedy zadanie zostało ostatnio wykonane i sprawdza, czy nie było żadnych pominiętych instancji, gdy system był wyłączony. Uruchomi je po ponownym włączeniu komputera, ale każde zadanie można wykonać tylko raz dziennie.

Niektóre wersje crona, takie jak fcron, domyślnie oferują funkcje anacron. Zaawansowani użytkownicy mogą chcieć zajrzeć Hcron lub SuperCron , które wprowadzają wiele ulepszeń do podstawowych funkcji crona, ale są również nieco trudne w zarządzaniu.

Co z tobą? Jak organizujesz swoje cyfrowe zadania? Jakie zadania planujesz w systemie Linux? Podziel się swoimi historiami i wskazówkami dotyczącymi używania crona w komentarzach.

Źródło obrazu: tablica harmonogramu autor: Gonzalo Aragon przez Shutterstock

Udział Udział Ćwierkać E-mail 12 witryn wideo, które są lepsze niż YouTube

Oto kilka alternatywnych witryn wideo dla YouTube. Każdy z nich zajmuje inną niszę, ale warto dodać je do swoich zakładek.

Czytaj dalej
Powiązane tematy
  • Linux
  • Linux
O autorze Ivana Isadora Devcic(24 opublikowane artykuły)

Ivana Isadora jest niezależną pisarką i tłumaczką, miłośniczką Linuksa i fanką KDE. Wspiera i promuje bezpłatne i otwarte oprogramowanie oraz zawsze poszukuje nowych, innowacyjnych aplikacji. Dowiedz się, jak się z nami skontaktować tutaj .

Więcej od Ivany Isadory Devcic

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować