Crontab - jeśli masz obecnie witrynę z dużą ilością serwerów, możesz chcieć uruchomić pewne procesy, takie jak wzbogacanie danych lub generowanie miniaturek w tle, bez zakłócania interfejsu użytkownika. Cóż, Linux Crontab ma dobry program, który robi dokładnie to: Cron.

Wprowadzenie do Crona

Czym więc jest ten program? Cron jest podzielony na kategorie jako demon, który może wykonywać zaplanowane polecenia. Jest uruchamiany automatycznie po wejściu w poziomy uruchamiania dla wielu użytkowników, z /etc/init.d. Przeszukuje obszar buforowania w / var / spool / cron / crontabs w poszukiwaniu plików crontab nazwanych na cześć kont w / etc / passwd. Aby uzyskać dostęp do crontabs w tym katalogu, musisz użyć polecenia crontab zamiast bezpośredniego dostępu do nich. Cron może także odczytać nieco inny format / etc / crontab, a także pliki w /etc/cron.d.

Po skonfigurowaniu Cron budzi się co minutę, sprawdza zapisane crontabs linuxa i sprawdza polecenie, aby sprawdzić, czy jest coś do wykonania. Jeśli polecenie zostanie wykonane, a dane wyjściowe zostaną wygenerowane, dane wyjściowe są następnie wysyłane pocztą do właściciela crontab lub użytkownika w zmiennej MAILTO w pliku crontab. Kopie potomne crona, który uruchamia te procesy, są nazwane wielkimi literami, co zobaczysz w wynikach ps i syslog.

Cron sprawdza również każdą minutę pod kątem zmian w czasie modulacji katalogu buforowania. Jeśli są zmiany, bada modtime wszystkich crontabów z Linuksem i ładuje te, które uległy zmianie. W rezultacie cron nie musi restartować się po zmianie pliku crontab.

Gdy zegar jest zmieniany o trzy godziny lub mniej, istnieją specjalne okoliczności, takie jak na początku i na końcu czasu letniego. Jeśli czas się zbliża, zadania, które mają być uruchomione w pomijanym czasie, zostaną zmienione, aby działały wkrótce po zmianie. Z drugiej strony, jeśli czas przesunie się do tyłu, zadania, które spadną w powtarzanym czasie, nie zostaną ponownie uruchomione.

Dotyczy to tylko zadań uruchamianych w określonym czasie, a nie zadań godzinowych lub oznaczonych „*” w specyfikacji minut / godzin. Zadania określone przy użyciu dzikich samochodów są natychmiast uruchamiane na podstawie nowego czasu. W przypadku zmiany zegara dłuższej niż trzy godziny, nowy czas jest natychmiast wykorzystywany.

W Red Hat i Debian cron traktuje pliki cron.d jako rozszerzenia pliku linux crontab, ponieważ mają one specjalny format pliku, co oznacza, że ​​zawierają pole użytkownika. Ta funkcja ma na celu umożliwienie pakietów, które wymagają dokładniejszej kontroli planowania niż katalogi dzienne, miesięczne lub tygodniowe. Takie pliki najlepiej nazwać na podstawie ich pakietów dostawców. Pliki muszą być zgodne z konwencją nazewnictwa stosowaną dla części roboczych, ponieważ muszą składać się wyłącznie z wielkich i małych liter, cyfr, łączników i znaków podkreślenia. Pliki w katalogu cron.d są monitorowane pod kątem zmian, podobnie jak katalog linux crontab. W przypadku poleceń takich jak / bin / ls pamiętaj, aby użyć bezwzględnych nazw ścieżek do wywołania właściwego polecenia.

Wprowadzenie do Linux Crontab

Teraz, gdy znasz już tajniki crona, przyjrzyjmy się bliżej linux crontab, który jest programem do instalowania, odinstalowywania lub wyświetlania tabel w celu sterowania samym demonem. Każdy użytkownik może mieć własny crontab linux, a pliki są dostępne w katalogu crontabs, ale nie są przeznaczone do bezpośredniej edycji.

Każde polecenie podane w crontabie linuksa użytkownika zostanie wykonane jako użytkownik będący jego właścicielem. Tabulatory, spacje wiodące i puste linie są zwykle ignorowane. Linie, które mają znak krzyżyka jako pierwszy znak spacji, są ignorowane, ponieważ są traktowane jako komentarze. Warto zauważyć, że komentarze nie są dozwolone w tych samych wierszach poleceń cron, ponieważ będą one czytane jako część polecenia. Z podobnej uwagi komentarze nie są również dozwolone w wierszach z ustawieniami zmiennych środowiskowych.

W crontabie linuksa, aktywna linia z komendą cron lub ustawieniem zmiennej środowiskowej, która ma postać „nazwa = wartość”, gdzie w razie potrzeby można wstawić spacje wokół znaku równości. Wszelkie kolejne spacje niebędące wiodącymi są częścią wartości nazwy. Łańcuch wartości można umieścić w pojedynczym lub podwójnym dopasowanym cudzysłowie, aby zachować końcowe lub wiodące puste miejsca. Nie jest analizowany pod kątem zastępowania środowiska, więc może się okazać, że wiersze takie jak „PATH = $ HOME / bin: $ PATH” nie będą działać zgodnie z oczekiwaniami.

Wiele ustawień środowiska jest konfigurowanych automatycznie przez crona, na przykład HOME i LOGNAME są ustawiane z linii passwd użytkownika i SHELL jest ustawiony na / bin / sh, a PATH jest ustawiony na / usr / bin: / bin. Możesz zastąpić PATH, SHELL i HOME przez ustawienia crontab. LOGNAME nie można jednak zmienić, ponieważ jest to użytkownik, od którego uruchomione jest zadanie. W systemach BSD ta zmienna może nazywać się USER, w którym to przypadku również zostanie ustawiony USER.

Jeśli wysyłanie wiadomości e-mail jest częścią poleceń uruchamianych w crontabie linuksa, cron również spojrzy na MAILTO. Jeśli zmienna jest zdefiniowana i niepusta, wiadomość e-mail jest wysyłana do określonego użytkownika. Ale jeśli jest pusty, żadna poczta nie jest wysyłana, a zamiast tego przesyłana jest do właściciela linux crontab. Jeśli plik cron.allow jest dostępny, musisz być w nim wymieniony, aby móc korzystać z tego polecenia. Jeśli ten plik nie istnieje, ale istnieje plik cron.deny, należy go usunąć z tego pliku, aby użyć polecenia. Jeśli żaden plik nie istnieje, tylko superużytkownik będzie mógł użyć polecenia w zależności od parametrów zależnych od strony. Alternatywnie, wszyscy użytkownicy będą mogli użyć polecenia, tak jak w przypadku standardowych systemów Debian.

Jeśli opcja –u jest dostępna, podaje nazwę użytkownika, którego crontab wymaga poprawienia. Jeśli nie podano, to crontab sprawdza crontab użytkownika wykonującego polecenie. Ważne jest, aby używać tej opcji zawsze ze względów bezpieczeństwa podczas uruchamiania wewnątrz su, ponieważ su może być mylone z linux crontab. Opcja -l jest dostępna, aby bieżący plik crontab był wyświetlany na standardowym wyjściu, a opcja -r usuwa bieżący plik crontab. Polecenie -e służy do edycji bieżącego crontabu systemu Linux przy użyciu edytorów określonych przez zmienne środowiskowe EDITOR lub VISUAL. Nie można używać żadnego edytora, który rozłącza i ponownie tworzy plik; potrzebujesz edytora, który edytuje plik na miejscu. Po wyjściu z edytora, poprawiony crontab Linux zostanie automatycznie zainstalowany.

Moduł pam_env jest również obsługiwany przez cron w systemie Debian GNU / Linux, ładując środowisko zgodnie z plikiem modułu. Należy jednak zauważyć, że ustawienie PAM nie zastępuje wyżej wymienionych ustawień ani ustawień pliku crontab. Jeśli chcesz ŚCIEŻKĘ inną niż lokalizacja pojemnika, musisz ustawić ją w pliku crontab. Cron domyślnie wysyła wiadomości e-mail przy użyciu typu zawartości „tekst / zwykły” z zestawem parametrów zestawu znaków do zestawu kodów / mapy znaków regionu, w którym uruchomiono cron, co jest domyślnym ustawieniem regionalnym systemu bez zestawu zmiennych środowiskowych lub ustawienia regionalne skonfigurowane przez zmienne. Możesz dodać własne kodowanie znaków dla danych wyjściowych poczty, ustawiając zmienne „Content_Transfer_Encoding” i „Content_Type” w crontabs, aby pasowały do ​​nagłówków nazwisk.

Polecane kursy

  • Internetowy kurs R Studio Anova Techniques
  • Szkolenie certyfikacyjne w AngularJS
  • Kurs certyfikacyjny ISTQB poziomu 1
  • Szkolenie certyfikacyjne z podstaw testowania oprogramowania

Praca na Crontab

Do polecenia crontab, znajdującego się w systemach operacyjnych uniksopodobnych i uniksowych, można uzyskać dostęp za pośrednictwem terminala. Aby zobaczyć, co crontab obecnie działa, otwórz terminal w systemie i uruchom następującą komendę:

$ sudo crontab -l

Aby edytować listy zadań crontab, możesz użyć następującego polecenia:

$ sudo crontab -e

To polecenie otwiera domyślny edytor w twoim systemie, którym może być pico lub vio, aby zmienić crontab. Aby zapisać zadanie crontab w pliku crontab, zapisz i zamknij edytor. Zadania Crontab lub cronjobs można zapisać w następujący sposób:

* * * * * /bin/execute/this/script.sh

W powyższym poleceniu znajduje się pięć gwiazdek, z których każda reprezentuje różne części daty w celu zaplanowania zadania. Tutaj są:

  1. Minuta, od zera do 59
  2. Godzina, od zera do 23
  3. Dzień miesiąca, od jednego do 31
  4. Miesiąc, od jednego do 12
  5. Dzień tygodnia, od zera do szóstego, przy czym zero oznacza niedzielę

Powyższa lista została podana w kolejności, więc musisz najpierw zdefiniować minutę, a następnie godzinę, dzień miesiąca, miesiąc i dzień tygodnia. Możesz zachować gwiazdkę, jeśli nie chcesz definiować żadnego z pól, ale ważne jest, aby pamiętać, że symbol oznacza „każdy”. Jeśli pozostawisz wszystkie pięć pól niezdefiniowanych z nienaruszonymi gwiazdkami, oznacza to każdą minutę każdej godziny, każdego dnia każdego tygodnia i każdego miesiąca.

Załóżmy, że chcesz po prostu wykonać skrypt w południe w niedzielę, oto co robisz:

0 12 * * 0 /bin/execute/this/script.sh

Teraz skrypt jest wykonywany, gdy zegar systemowy osiąga 1200 godzin w każdą niedzielę, co tydzień każdego miesiąca. Teraz, jeśli chcesz wykonywać skrypt w każdy dzień roboczy o godzinie 12 w południe, oto co piszesz:

0 12 * * 1-5 /bin/execute/this/script.sh

Cron wykonuje polecenia, gdy pola roku, miesiąca, godziny i minuty odpowiadają bieżącej godzinie lub gdy co najmniej dzień miesiąca i roku odpowiada bieżącej godzinie. Pole może być oznaczone gwiazdką w celu oznaczenia „od pierwszego do ostatniego”. Dopuszczalne są zakresy liczb, przy czym zakresy to dwie liczby oddzielone łącznikiem. Określony zakres obejmuje, więc zakres 8–11 dla „godzin” określa wykonanie w ósmej, dziewiątej, dziesiątej i jedenastej godzinie. Obsługiwane są również listy, z każdą liczbą oddzieloną przecinkami, na przykład „1, 2, 8, 9”. Możesz także miksować i dopasowywać, więc może to być „1, 2, 8-11”.

Możesz użyć wartości kroku w połączeniu z zakresami, gdzie „/” po zakresie określa pominięcie wartości liczby przez zakres. Na przykład „0-11 / 2” w polu godziny określa wykonywanie polecenia co drugą godzinę, które zapisano by jako taką listę: „0, 2, 4, 6, 8, 10”. Po gwiazdce można dopuścić kroki, takie jak „* / 2”, aby wskazać polecenie, które należy wykonywać co dwie godziny. W polach dnia i miesiąca możesz użyć pierwszych trzech liter tego konkretnego dnia lub miesiąca, a wielkość liter nie ma znaczenia. Jednak listy i zakresy nazw nie są obsługiwane. Dzień wykonania można określić w dwóch polach: dzień tygodnia i dzień miesiąca. Jeśli oba pola są ograniczone, polecenie zostanie uruchomione, gdy jedno z pól będzie zgodne.

Reszta linii to „szóste” pole, które określa polecenie do uruchomienia. Część polecenia wiersza zajmuje nową linię lub znak do%. Jest wykonywany przez sh lub przez określoną powłokę w zmiennej SHELL pliku crontab. % W poleceniu zostanie zmieniony na znaki nowego wiersza, chyba że są poprzedzone znakiem odwrotnego ukośnika „\”. Wszystkie dane po pierwszym znaku% są wysyłane jako standardowe dane wejściowe do polecenia. Nie można podzielić jednego wiersza polecenia na wiele wierszy.

Planowanie sztuczek na Crontab

Formatowanie może trochę przyzwyczaić się, ale oto kilka sztuczek, które mogą ci pomóc. Jeśli chcesz uruchamiać cronjob co dziesięć minut, możesz albo napisać to w ten sposób:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Możesz też napisać to w ten sposób, co jest łatwiejsze:

* / 10 * * * * /bin/execute/this/script.sh

Masz również specjalne słowa, które możesz dodać do pola pierwszej minuty zamiast liczby, na przykład:

  • @ restart: uruchomi skrypt raz podczas uruchamiania systemu
  • @ rok: aby uruchomić polecenie raz w roku (alternatywny format to „0 0 1 1 *”)
  • @ rocznie: alternatywa dla rocznego słowa kluczowego
  • @miesięcznie: uruchamianie polecenia raz w miesiącu („0 0 1 * *”)
  • @w tygodniu: uruchamianie raz w tygodniu („0 0 * * 0”)
  • @daily: biegać raz w tygodniu („0 0 * * *”)
  • @midnight: alternatywa dla codziennego słowa kluczowego
  • @hourly: uruchamiać co godzinę („0 * * * *”)

Pamięć wyjściowa

Domyślnie cron zapisuje dane wyjściowe zadania w skrzynce pocztowej użytkownika lub katalogu głównym. Możesz jednak uprościć wyjście i zwiększyć jego reprezentatywność, zapisując go w osobnym pliku dziennika. Tak to się robi:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux może raportować na różnych poziomach. Masz standardowe błędy STDERR i standardowe wyjście STDOUT, oznaczone odpowiednio jako 2 i 1. Poniższa instrukcja nakazuje przechowywać zarówno STDERR, jak i STDOUT, aby utworzyć pojedynczy strumień danych komunikatów i błędów:

2> i 1

Tak więc zdefiniowaliśmy strumień wyjściowy, teraz musimy podać mu miejsce docelowe. „>” Zastępuje plik, a „>>” dołącza się do niego. Do dołączania, które jest zawsze bezpieczniejsze, możesz użyć następującego polecenia:

>> /var/log/script_output.log

Wniosek

Jak widać, cron pozwala ustawić zadania tak, aby automatycznie działały w tle w regularnych odstępach czasu. Umożliwia to automatyczne tworzenie kopii zapasowych, planowanie aktualizacji, synchronizację plików i wiele więcej. Możesz zrobić to wszystko i więcej za pomocą crontab.

Polecane artykuły: -

Oto kilka artykułów, które pomogą ci uzyskać więcej szczegółów na temat Linux Crontab, więc po prostu przejdź przez link.

  1. Linux Wywiad Pytania i odpowiedzi | Przydatne i najczęściej zadawane pytania
  2. Kariera w systemie Linux
  3. Top 10 przydatnych aplikacji Linux dla administratorów systemu
  4. Linux a Windows 10