Jak korzystać z Crona na Linux Unix

Czym jest cron?


Cron to nazwa programu, który umożliwia użytkownikom Linuksa/Unixa automatyczne wykonywanie poleceń lub skryptów (grup poleceń) o określonej godzinie lub dacie. Jest zwykle używany do poleceń zadań administracyjnych, takich jak tworzenie kopii zapasowych, ale można go używać do uruchamiania czegokolwiek. Zgodnie z definicją na stronach podręcznika cron; jest to demon, który wykonuje zaplanowane programy.
Praktycznie we wszystkich dystrybucjach Linuksa wersja Vixie Cron jest wykorzystywana przez autora, którym jest Paul Vixie, jeden z wielkich guru Uniksa, a także twórca m.in. BIND, który jest jednym z najpopularniejszych serwerów DNS. na świecie.

Uruchom cron


Cron jest demonem (usługą), co oznacza, że ​​wystarczy go uruchomić tylko raz, zwykle z tym samym startem systemu. Usługa cron nazywa się crond. W większości dystrybucji usługa jest instalowana automatycznie i uruchamiana przy starcie systemu, można ją zweryfikować na kilka sposobów:
 1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) jest uruchomiony… 
Jeśli masz zainstalowaną komendę serwisową:
 status zbioru usług
 crond (pid 507) działa… 
można go również przejrzeć za pomocą polecenia ps:
 ps -ef | grep crond
jeśli z jakiegoś powodu cron nie działa możemy zacząć od:
 /etc/rc.d/init.d/crond start Uruchamianie crond: [OK]
[kolor = rgb (0,0,0)] Jeśli usługa nie była skonfigurowana do startu od początku, wystarczyłoby dodać ją komendą chkconfig: [/ color]
 chkconfig --poziom 35 crond włączony 
Dzięki temu dodałbyś go do uruchamiania poziomów 3 i 5, aby uruchamiał się w czasie rozruchu systemu.

Korzystanie z cron


Istnieją co najmniej dwa różne sposoby korzystania z crona:
Pierwszy znajduje się w katalogu / etc, gdzie najprawdopodobniej znajdziesz następujące katalogi:
  • cron.godzinowo
  • cron.daily
  • cron.tygodnik
  • cron.miesięcznie
Jeśli plik skryptu zostanie umieszczony w dowolnym z tych katalogów, skrypt będzie uruchamiany co godzinę, codziennie, co tydzień lub co miesiąc, w zależności od katalogu.
Aby skrypt został wykonany, musi być podobny do poniższego:
 #!/bin/sh #skrypt generujący backup cd/usr/documents tar czf *backup cp backup/inny_katalog/
Musimy naprawić, że pierwsza linia zaczyna się od # !, co wskazuje, że jest to skrypt powłoki bash, pozostałe linie to polecenia, które chcemy, aby skrypt wykonał. Skrypt ten można by nazwać na przykład backup.sh i musimy również zmienić odpowiednie uprawnienia, aby można było go wykonać, na przykład:
 chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 root root 0 Lip 20 09:30 backup.sh
Znak „x” w grupie uprawnień właściciela (-rwx) wskazuje, że można go wykonać.
Jeśli zostawimy ten skrypt w cron.hourly, to będzie on wykonywany co godzinę z jedną minutą każdego dnia, później wyjaśnię dlaczego.
Drugim sposobem uruchamiania lub używania crona jest bezpośrednia manipulacja plikiem /etc/crontab. W domyślnej instalacji różnych dystrybucji Linuksa ten plik będzie wyglądał mniej więcej tak:
 cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Pierwsze cztery wiersze to zmienne, które wskazują, co następuje:
POWŁOKAJest to „powłoka”, pod którą działa cron. Jeśli nie zostanie określony, domyślnie zostanie wybrany ten wskazany w wierszu / etc / passwd odpowiadający użytkownikowi uruchamiającemu crona.
ŚCIEŻKAZawiera lub wskazuje ścieżkę do katalogów, w których cron będzie szukał polecenia do wykonania. Ta ścieżka różni się od globalnej ścieżki systemu lub użytkownika.
WYŚLIJ DOTo do kogo wysyłane jest wyjście polecenia (jeśli ma jakiekolwiek wyjście). Cron wyśle ​​wiadomość e-mail do każdego, kto jest określony w tej zmiennej, to znaczy, że musi to być prawidłowy użytkownik systemu lub innego systemu. Jeśli nie zostanie określony, cron wyśle ​​wiadomość do użytkownika, który jest właścicielem wykonywanego polecenia.
DOMJest to katalog główny lub katalog główny polecenia cron, jeśli nie jest wskazany, katalogiem głównym będzie ten wskazany w pliku / etc / passwd odpowiadający użytkownikowi, który uruchamia cron.
ten komentarze są oznaczone # na początku linii.
Po powyższych przychodzą wiersze, które wykonują odpowiednio zaplanowane zadania. Nie ma ograniczeń co do liczby zadań, po jednym na linię. Pola (Są 7) które tworzą te linie są uformowane w następujący sposób:
 Minuta Godzina Dzień Miesiąca Miesiąc Dzień Tygodnia Polecenie użytkownika
  • Pole: Opis
  • Minuta: Kontroluje minutę godziny, w której polecenie zostanie wykonane, wartość ta musi wynosić od 0 do 59.
  • Czas: Kontroluje czas wykonania polecenia, jest określony w formacie 24-godzinnym, wartości muszą być między 0 a 23, 0 to północ.
  • Dzień miesiąca: Dzień miesiąca, w którym chcesz wykonać polecenie. Na przykład zostanie wskazane 20, aby wykonać polecenie 20 dnia miesiąca.
  • Miesiąc: Miesiąc, w którym polecenie zostanie wykonane, można wskazać numerycznie (1-12) lub nazwą miesiąca w języku angielskim tylko trzy pierwsze litery.
  • Dzień powszedni: Dzień tygodnia, w którym zostanie wykonane polecenie, może to być numeryczne (0-7) lub nazwa dnia w języku angielskim, tylko trzy pierwsze litery. (0 i 7 = niedziela)
  • Użytkownik: Użytkownik wykonujący polecenie.
  • Komenda: Polecenie, skrypt lub program, który chcesz uruchomić. To pole może zawierać wiele słów i spacji.
Gwiazdka * jako wartość w pierwszych pięciu polach wskaże początek-koniec pola, czyli wszystko. * w polu minut oznacza wszystkie minuty.
Aby lepiej zrozumieć to z pierwszych 5 pól i gwiazdki, lepiej posłużę się kilkoma przykładami:
Przykład:
 Opis 01 * * * * Uruchamia się o 1 minutę o każdej godzinie każdego dnia 158 * * * O 8:15 rano. codziennie 15 20 * * * O 20:15 każdego dnia 00 5 * * 0 O 5 rano w każdą niedzielę * 5 * * Niedz Co minutę od 5:00 rano o 5:59 rano w każdą niedzielę 45 19 1 * * O 19:45 1. każdego miesiąca 01 * 20 7 * O 1 minucie każdej godziny 20 lipca 10 1 * 12 1 O 1:10 W każdy poniedziałek grudnia 00 12 16 * Śr W południe 16 każdego miesiąca, czyli środa 30 9 20 7 4 O 9:30 20 lipca, czyli czwartek 30 9 20 7 * O 9:30 od 20 lipca niezależnie od dnia tygodnia 20 * * * 6 Do 20 minuty o każdej godzinie w soboty 20 * * 1 6 Do 20 minuty o każdej godzinie w soboty w styczniu 
Możliwe jest również określenie list w polach. Listy mogą być w formie 1,2,3,4 lub w formie 1-4, która byłaby taka sama. Cron w ten sam sposób obsługuje wzrosty na listach, które są wskazane w następujący sposób:
 Wartość lub lista / przyrost
Ponownie, listy i przyrosty są łatwiejsze do zrozumienia dzięki przykładom:
Przykład:
 Opis 59 11 * 1-3 1,2,3,4,5 O 11:59 Od poniedziałku do piątku, od stycznia do marca 45 * 10-25 * 6-7 Po 45 minutach o wszystkich godzinach od 10 do 25 wszystkich miesięcy i w dzień soboty lub niedzieli 10,30,50 * * * 1,3,5 O 10, 30 i 50 minutach wszystkich godzin w poniedziałek, środę i piątek * / 15 10-14 * * * Co piętnaście minut od 10:00 o 14:00 * 12 1-10 / 2 2,8 * Wszystkie minuty o godzinie 12, w dniach 1,3,5,7 i 9 lutego i sierpnia. (Przyrost w trzecim polu wynosi 2 i zaczyna się od 1) 0 * / 5 1-10,15,20-23 * 3 Co 5 godzin od 1 do 10 dnia, od 15 dnia i od 20 do 23 dnia każdego miesiąca i dzień jest środa 3/3 2/4 2 2 2 Co 3 minuty począwszy od minuty 3 (3,6,9 itd.) godziny 2,6,10 itd. (co 4 godziny począwszy od godziny 2) 2 lutego, czyli we wtorek
Jak widać w ostatnim przykładzie, zadanie cron, które zostało przypisane do tego wiersza z tymi danymi, zostanie wykonane tylko wtedy, gdy spełnionych zostanie 5 pól (AND). Oznacza to, że aby zadanie zostało uruchomione, musi nastąpić we wtorek 2 lutego o godzinie 02:03. Zawsze jest to logiczne AND, które zwraca prawdę tylko wtedy, gdy wszystkie 5 pól jest prawdziwych w określonej minucie.
[kolor = rgb (0,0,0)] Poprzedni przypadek wyjaśnia, że: [/ kolor]
Program cron jest wywoływany co minutę i wykonuje zadania, które jego pola są wypełnione w tej właśnie minucie.
Wraz z polem użytkownika i poleceniem, wiersze crontab mogą wyglądać następująco:
 0 22 * ​​​​* * root /usr/daily backup.sh 0 23 * * 5 root /usr/weekly backup.sh 0 8.20 * * * jcarrillo mail -s "system uruchomiony" [email protected]
Pierwsze dwie linie są wykonywane przez użytkownika root, a pierwsza wykonuje codziennie o 22:00 skrypt generujący codzienną kopię zapasową. Drugi wykonuje o godzinie 23:00 w każdy piątek skrypt generujący cotygodniową kopię zapasową. Trzecia linia jest wykonywana przez użytkownika sergio i byłaby wykonywana codziennie o 8 rano i 8 wieczorem każdego dnia i poleceniem jest wysłanie e-maila na konto [email protected] z tematem "system działa", sposób, aby administrator był świadomy, że zdalny system jest aktywny w określonych godzinach, ale jeśli w tym czasie nie otrzyma wiadomości e-mail, coś jest nie tak.
Bycie rootem, jest to możliwe, bezpośrednio zmodyfikuj crontab:
 vim / etc / crontab 
Jest to bezpośrednio modyfikowane.

Uruchamianie Crona z wieloma użytkownikami, polecenie crontab


Linux to system dla wielu użytkowników a cron to jedna z aplikacji, która wspiera pracę z kilkoma użytkownikami jednocześnie. Każdy użytkownik może mieć swój własny plik crontab, w rzeczywistości zakłada się, że / etc / crontab jest plikiem crontab użytkownika root, chociaż nie ma problemu z dołączeniem innych użytkowników, a więc szóste pole, które dokładnie wskazuje, kim jest użytkownik. realizujący zadanie i wymagany w:
 / etc / crontab

Ale kiedy normalni użytkownicy (a nawet korzeń) chcą wygenerować własny plik crontab, użyjemy polecenie crontab.
W katalogu / var / spool / cron (może się różnić w zależności od dystrybucji), dla każdego użytkownika generowany jest plik cron, chociaż jest to plik tekstowy, nie należy go edytować bezpośrednio.
Istnieją wtedy dwie sytuacje, bezpośrednio generując plik crontab za pomocą polecenia:
 crontab -e
Za pomocą którego otworzy się domyślny edytor (zwykle vi) z plikiem o nazwie pusty crontab i w którym użytkownik wprowadzi swoją tabelę zadań i zostanie ona automatycznie zapisana jako /var/spool/cron/user.
Innym przypadkiem jest to, że użytkownik edytuje normalny plik tekstowy z wpisami zadań i jako przykład nazywa go „my_cron”, a następnie polecenie $> crontab my_cron będzie odpowiedzialne za ustanowienie go jako pliku cron użytkownika w / var / szpula / cron / użytkownik:
 vi mój_cron # usuwa pliki z folderu współdzielonego 0 20 * * * rm -f / home / sergio / shared / * # wykonuje skrypt wykonujący kopię zapasową folderu dokumentów pierwszego dnia każdego miesiąca 0 22 1 * * / home / sergio / miesięcznie support.sh # co 5 godzin od poniedziałku do piątku upewnia się, że uprawnienia są poprawne w moim domu 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq ( file)> ls mój_cron> crontab mój_cron (ustawiony na /var/spool/cron/user)
Podsumowując powyższe i rozważenie innych opcji dla crontab:
 crontab file.cron (ustawi plik.cron jako crontab użytkownika) crontab -e (otworzy edytor ustawień, w którym można utworzyć lub edytować plik crontab) crontab -l (wyświetla bieżący plik crontab użytkownika, jego zadania cron) crontab -r (usuwa aktualny plik crontab użytkownika)
W niektórych dystrybucjach podczas edytowania zwykłych plików crontab użytkownika konieczne jest ponowne uruchomienie usługi, aby można było ponownie odczytać pliki crontab w / var / spool / cron.
 restart crond usługi 
Aby lepiej zrozumieć, jak uruchamiać / zatrzymywać / ponownie uruchamiać usługi, w tym artykule znajdziesz więcej informacji.

Kontrolowanie dostępu do cron


Cron pozwala kontrolować, którzy użytkownicy mogą lub nie mogą korzystać z usług crona. Osiąga się to w bardzo prosty sposób za pomocą następujących plików:
  • /etc/cron.allow
  • /etc/cron.deny
Aby uniemożliwić użytkownikowi korzystanie z crona, a raczej polecenia crontab, wystarczy dodać jego nazwę użytkownika do pliku /etc/cron.deny, aby umożliwić jego użycie, wystarczyłoby dodać swoją nazwę użytkownika do /etc/cron.allow, jeśli z jakiegoś powodu chcesz zabronić używania crona wszystkim użytkownikom, możesz wpisać słowo ALL na początku cron.deny i to wystarczy.
 echo ALL >> / etc / cron.deny lub dodać kolejnego użytkownika do cron.allow echo juan >> / etc / cron.allow
Jeśli nie istnieje ani plik cron.allow, ani plik cron.deny, teoretycznie użycie crona jest wtedy bez ograniczeń użytkownika. Dodanie nazwy użytkownika w cron.allow, bez tworzenia pliku cron.deny, będzie miało taki sam efekt, jak utworzenie go ze słowem ALL. Oznacza to, że po utworzeniu pliku cron.allow z pojedynczym użytkownikiem, pozostali użytkownicy, którzy chcą używać crona, zawsze będą musieli być określeni w tym pliku.
WnioskiRozmawialiśmy o jego działaniu, mam nadzieję, że zrozumiałeś, niektóre dystrybucje, takie jak Red Hat, zawierają wariant taki jak anacron, który może nadrobić pewne braki crona, mimo to na każdym poziomie, od najbardziej podstawowego do najbardziej zaawansowanego, używany jest cron wskazane jest zrozumienie jego działania. Jeśli znajdziesz jakieś pytania lub masz sugestie, nie wahaj się umieścić ich w komentarzach.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave