Cron i crontab, wyjaśniono

Lukaina opublikowany chwilę temu doskonały poradnik na temat cron i crontab którymi myślę, że warto się nimi podzielić. Cron jest rodzajem odpowiednika zaplanowanych zadań w systemie Windowstylko tyle, że jest obsługiwana z terminala. Widzą to ci, którzy wolą interfejs wizualny, aby osiągnąć ten sam cel kolejny artykuł.

Co to jest cron?

Nazwa cron pochodzi od greckiego chronosu, co oznacza „czas”. W systemie operacyjnym Unix cron jest zwykłym menedżerem procesów w tle (demonem), który uruchamia procesy lub skrypty w regularnych odstępach czasu (na przykład co minutę, dzień, tydzień lub miesiąc). Procesy, które muszą zostać wykonane, oraz czas, w którym muszą zostać wykonane, są określone w pliku crontab.

prace Como

Demon cron zaczyna się od /etc/rc.d/ o /etc/init.d w zależności od dystrybucji. Cron działa w tle, co minutę sprawdza tabelę zadań crontab / etc / crontab lub / var / spool / cron w poszukiwaniu zadań do wykonania. Jako użytkownik możemy dodawać polecenia lub skrypty z zadaniami do crona, aby zautomatyzować niektóre procesy. Jest to przydatne na przykład do zautomatyzowania aktualizacji systemu lub dobrego systemu kopii zapasowych.

Podobne artykuł:
Samouczek: Zainstaluj pakiety .tar.gz i .tar.bz2

Co to jest Crontab?

Crontab to prosty plik tekstowy, który przechowuje listę poleceń do wykonania w czasie określonym przez użytkownika. Crontab zweryfikuje datę i godzinę wykonania skryptu lub polecenia, uprawnienia do wykonywania i zrobi to w tle. Każdy użytkownik może mieć swój własny plik crontab, w rzeczywistości plik / etc / crontab zakłada się, że jest to plik crontab użytkownika root, kiedy zwykli użytkownicy (a nawet root) chcą wygenerować własny plik crontab, użyjemy polecenia crontab.

Crontab to najłatwiejszy sposób zarządzania zadaniami cron w systemach z wieloma użytkownikami, jako zwykły użytkownik systemu lub użytkownik root.

Korzystanie z crontab

Zaczynamy od prostego przykładu.

Zamierzamy zautomatyzować aktualizację systemu, aby wyeliminować irytujące stwierdzenie „Zawsze muszę aktualizować, a mi się to nie podoba!”

jak
Podobne artykuł:
Polecenia umożliwiające poznanie systemu (identyfikacja sprzętu i niektórych konfiguracji oprogramowania)

Przede wszystkim zrobimy skrypt. Ten skrypt zostanie wywołany przez crona i będzie zawierał wszystkie instrukcje, które chcemy wykonać, dlatego konieczne jest przetestowanie go w kilku przypadkach i na kilka sposobów przed umieszczeniem go w cronie, prosty skrypt aktualizacyjny, taki jak ten:

#! / bin / bash #script update przykład #wybierz swoją dystrybucję # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

Usuń # z linii dystrybucji. Jeśli jest to Ubuntu / Debian, zaczyna się od apt-get.

Zapisujemy skrypt jako update.sh (np. Katalog skryptów w Twoim domu). Zmieniamy uprawnienia do wykonywania wspomnianego skryptu za pomocą:

chmod a + x ~ / scripts / update.sh

Uruchamiamy skrypt kilka razy, aby sprawdzić, czy wszystko działa płynnie, modyfikujemy to, co jest konieczne (nie może zawierać błędów, w przeciwnym razie cron będzie tylko powtarzał błąd). Teraz dodajmy zadanie do naszej tabeli crontab.

Dodaj zadania do crontab

Wykonujemy edycję pliku crontab za pomocą crontab -e, w niektórych dystrybucjach (takich jak Ubuntu) daje nam to możliwość wyboru żądanego edytora tekstu, resztę pozostaje vi. Plik crontab będzie wyglądał mniej więcej tak.

# mh dom mon dow polecenie użytkownika

gdzie:

  • m odpowiada minucie wykonania skryptu, wartości mieszczą się w zakresie od 0 do 59
  • h dokładny czas, obsługiwany jest format 24-godzinny, wartości mieszczą się w zakresie od 0 do 23, gdzie 0 oznacza północ.
  • Słońce odnosi się do dnia miesiąca, na przykład możesz określić 15, jeśli chcesz uruchamiać co 15 dni
  • dow oznacza dzień tygodnia, może być numeryczny (od 0 do 7, gdzie 0 i 7 to niedziela) lub pierwsze 3 litery dnia w języku angielskim: pon, wt, śr, czw, pt, sob, niedz.
  • użytkownik definiuje użytkownika, który wykona polecenie, może to być root lub inny użytkownik, o ile ma uprawnienia do wykonania skryptu.
  • komenda odnosi się do polecenia lub bezwzględnej ścieżki wykonywanego skryptu, na przykład: /home/usuario/scripts/update.sh, jeśli wywołuje skrypt, musi być wykonywalny

Dla jasności wyjaśniono kilka przykładów zadań crona:

15 10 * * * user /home/user/scripts/update.sh

Będzie uruchamiał skrypt update.sh codziennie o 10:15

15 22 * * * user /home/user/scripts/update.sh

Będzie uruchamiał skrypt update.sh codziennie o 10:15

00 10 * * 0 root apt-get -y update Użytkownik główny

Będzie uruchamiał aktualizację w każdą niedzielę o 10:00

45 10 * * sun root apt-get -y aktualizacja

Użytkownik root będzie przeprowadzał aktualizację w każdą niedzielę (niedziela) o godzinie 10:45

30 7 20 11 * użytkownik /home/usuario/scripts/update.sh

20 listopada o godzinie 7:30 użytkownik uruchomi skrypt

30 7 11 11 użytkownik słońca /home/usuario/scripts/pastel_con_velitas.sh

11 listopada o 7:30, czyli w niedzielę, użytkownik będzie świętował swojego administratora systemu (czyli mnie)

01 * * * * użytkownik /home/usuario/scripts/molestorecordatorio.sh

Irytujące przypomnienie co minutę o każdej godzinie każdego dnia (NIE zalecane).

Nadal można się nimi zająć zakresy specjalne:

30 17 * * 1,2,3,4,5

O 5:30 po południu codziennie od poniedziałku do piątku.

00 12 1,15,28 * *

O 12:28 każdego pierwszego, piętnastego i XNUMX dnia każdego miesiąca (idealne do płac)

Jeśli jest to mylące, uchwyty crontab specjalne ciągi do definiowania tych zakresów.

@reboot Uruchom raz, przy starcie
@rocznie kursuje tylko raz w roku: 0 0 1 1 *
@rocznie to samo co @yearly
@miesięczny kursuje raz w miesiącu, pierwszy dzień: 0 0 1 * *
@ Weekly Co tydzień pierwsza minuta pierwszej godziny tygodnia. 0 0 * * 0 ″.
@ codziennie, o godzinie 12:00 0 0 * * *
@midnight to samo co @daily
@ co godzinę w pierwszej minucie każdej godziny: 0 * * * *

Jego użycie jest bardzo proste.

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade

Nie mniej ważny:

Zarządzanie zadaniami w Cron

plik crontab

Zastąp istniejący plik crontab plikiem zdefiniowanym przez użytkownika

crontab -e

Edytuj plik crontab użytkownika, każda nowa linia będzie nowym zadaniem crontab.

crontab -l

Wypisz wszystkie zadania crontab użytkownika

crontab -d

Usuń crontab użytkownika

crontab -c reż

Definiuje katalog crontab użytkownika (musi mieć uprawnienia do zapisu i wykonywania)

crontab -u użytkownik

prefiks do obsługi tabeli crontab innego użytkownika, przykłady:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u użytkownik

To narzędzie, podobnie jak wiele innych, można zobaczyć bardziej szczegółowo i szczegółowo w:

Dzięki Lucain!

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Symbol zastępczy dla Alvaro Ortiz powiedział

    Ugh… trochę zagmatwane.

  2.   tonik powiedział

    * Brak / 30 (w polu minut), który jest uruchamiany co 30 minut ...

    1.    Erm3nda powiedział

      Właśnie to zamierzałem skomentować, dopóki nie zdecydowałem się przejrzeć komentarzy 😀
      Ten modyfikator to bardzo ważna informacja i bardzo przydatna.

      1.    Kika powiedział

        Witaj!
        Obecnie testuję konfigurację co 45 minut.

        * / 45 * * * *, a instrukcja wykonywana jest co 45 minut co godzinę ORAZ co godzinę. To jest do powiedzenia:

        Kursuje o 3:45, 4:00, 4:45, 5:00, 5:45, 6:00, 6:45 i tak dalej.

        Coś mi się nie podoba? Co mogę zrobić, żeby to było co 45 minut lub co najmniej raz na 45 minut co godzinę.

    2.    Kika powiedział

      Witaj!
      Obecnie testuję konfigurację co 45 minut.

      * / 45 * * * *, a instrukcja wykonywana jest co 45 minut co godzinę ORAZ co godzinę. To jest do powiedzenia:

      Kursuje o 3:45, 4:00, 4:45, 5:00, 5:45, 6:00, 6:45 i tak dalej.

      Coś mi się nie podoba? Co mogę zrobić, żeby to było co 45 minut lub co najmniej raz na 45 minut co godzinę.

  3.   Slack powiedział

    Witam, bardzo przydatne informacje, aby wyjaśnić, jak działa cron.
    Bajtów

  4.   Slack powiedział

    dla *

  5.   Łowca powiedział

    Świetnie, dziękuję za wyjaśnienie, jak działa cron. Połóżmy małą dłoń 🙂

  6.   Jakub powiedział

    Ta linia, jak rozumiem, zostanie wykonana o 10:15, popraw mnie, jeśli się mylę
    Tam jest 10:15
    15 22 * * * user /home/user/scripts/update.sh

  7.   Agustin powiedział

    Witaj! bardzo dobre informacje.
    Aby wykonać skrypt co pół godziny, wiersz, który powinien zostać dodany do CronTab, będzie wyglądał następująco: „30 * * * * root Scrip.sh” Prawidłowo? Dziękuję bardzo!

  8.   użyjmy Linuksa powiedział

    Nie. Jeśli dobrze pamiętam, w tym celu należy wstawić / 30 * * * * root Scrip.sh.
    Oznacza to, że dodaj / przed 30.
    Twoje zdrowie! Paweł.

  9.   Jonathan powiedział

    Witam Podobał mi się Twój post, jest bardzo kompletny ale chciałem Cię o coś zapytać.
    Mam problem z tym poleceniem i takim jak „at”.

    Chcę uruchomić skrypt w określonym czasie i umieścić

    at -f /home/mi_user/Desk/script.sh 18:08 przykład

    a skrypt nie jest wykonywany na ekranie.

    Z cronem to samo dzieje się ze mną, edytuję plik crontab z "crontab -e"

    na koniec dodaję ten wiersz:

    46 19 my_user /home/mi_user/Desk/script.sh

    i nic nie robi, nie pokazuje scenariusza.

    Jakieś sugestie? Bardzo dziękujemy i przepraszamy za wszelkie niedogodności

    1.    użyjmy Linuksa powiedział

      Aby terminal się pojawił, może być konieczne uruchomienie terminala i przekazanie skryptu jako parametru.

      Na przykład:

      lxterminal -e "my_user /home/mi_user/Desktop/script.sh"

      Parametr do użycia może się różnić w zależności od używanego emulatora terminala.

      Mam nadzieję, że to zadziała.

      Przytulić! Paweł.

  10.   patrecas powiedział

    Wejście jest doceniana.

    10 punktów !!

    cześć2!!

  11.   Rodolfo powiedział

    Bardzo dziękuję, bardzo pomogło mi to w wyjaśnieniu kilku rzeczy, wielkie dzięki, po więcej szczegółów czy wątpliwości przejdę na STRONĘ MAN, jeszcze raz pozdrawiam.

  12.   jahir powiedział

    Wujku bardzo dziękuję, czytałem i testowałem przykłady. bardzo dziękuję ... to bardzo zrozumiałe. Twoje zdrowie

  13.   geovanni powiedział

    Użyłem Ubuntu Server 12.04.2 LTS i używam wersji crontab, którą posiadam, do usunięcia listy zadań użytkownika, crontab -r (i -l, jak mówi ten podręcznik). Jasne, że chodzi o wersje.

    Z drugiej strony, kiedyś uruchamiałem tylko crontab i dzięki temu mogłem stworzyć własny plik wykonawczy, ale to nie był ten, który był wykonywany. Ten, który działa, to ten w / etc / crontab. może ktoś skorzysta z komentarza.

    PS (szukam z locate i whereis crontab, ale zwróciło tylko wspomniany adres i inny zaszyfrowany plik, więc jeśli ten, który został wykonany, był tym w / etc / crontab, ale podczas wykonywania polecenia crontab -e, pojawił się mój ze wszystkimi zadaniami, które zdefiniowałem), gdzie był przechowywany ten plik '???? Pozdrowienia. Zawsze loguję się jako root.

  14.   Sebastian powiedział

    Znakomity, bardzo przydatny !!!

  15.   mmm powiedział

    Witam, chciałbym to zrobić ………… «15 10 * * * root ifdown eth0»

    to znaczy, że w pewnym momencie karta sieciowa się wyłączy ………… cóż, umieściłem ją w pliku crontab i nie zadziałała …… .. co słychać?

    Saludos y gracias

  16.   Miguel powiedział

    Brakowało zdefiniowania „mon” po tytule „Dodaj zadania do tabeli crontab”

    Artykuł jest nadal ładny, cron jest niezwykle przydatny.

  17.   Oskar powiedział

    Jak fajny był ten dobry post, zapytaj mnie
    Jeśli chcę śledzić zapisy pozostawione przez wykonanie zadań, gdzie mogę je zobaczyć?

    to decdir Chcę zobaczyć historię działań wykonanych w przeszłości tego pliku i chcę zobaczyć kto go modyfikował i datę

    dzięki

  18.   Oscar powiedział

    Chcę sprawdzić historię modyfikacji tego

    jak mogę to zrobić

    dzięki

  19.   Andres Ledo powiedział

    Dzień dobry,

    Myślę, że w skrypcie ubuntu popełniłeś błąd, wstawiłeś ap-get -y upgrade zamiast apt-get -y upgrade. (Zostawiłeś t).

    Pozdrowienia.

    1.    użyjmy Linuksa powiedział

      Więc jest. Dziękuję Ci!
      Przytulić! Paweł

  20.   Gabriel powiedział

    Chcę wiedzieć, jak utworzyć plik cron, aby móc określić czas za każdym razem, gdy jest wykonywany, katalog itp.

  21.   Valentin powiedział

    Dziękuję za wyjaśnienie operacji i podstawowych poleceń dla crona, teraz trochę się zabawię.

  22.   Sander powiedział

    Ilekroć szukam informacji na jakikolwiek temat związany z Gnu / Linux, krążę w kółko, aby znaleźć w 90% przypadków najlepszy tutorial w tej wspaniałej społeczności, myślę, że od teraz zacznę tutaj, a potem gdzie indziej.

    pozdrowienia

    1.    użyjmy Linuksa powiedział

      Dzięki Sander! Uścisk! Paweł.

  23.   Dario powiedział

    dom = dzień miesiąca
    dow = dzień tygodnia
    łatwiej jest się kojarzyć

  24.   Paschalny powiedział

    Dziękuję bardzo, bardzo kompletne i dobrze wyjaśnione.

  25.   szczęka powiedział

    To jest to samo, co dał nam mój nauczyciel systemów operacyjnych, nic nie zmieniam, teraz widzę, dlaczego zajęcia są takie złe. -.

  26.   Marcelo powiedział

    Szacowany,

    Pytanie, czy czas trwania zadania można ograniczyć?
    Na przykład mam zadanie, które powtarza się co 5 minut, po powtórzeniu, jeśli to zadanie jest nadal aktywne, pozwól mu je zabić i uruchomić ponownie.

    Dziękuję
    Marcelo. -

    1.    użyjmy Linuksa powiedział

      Cześć Marcelo!

      Myślę, że byłoby lepiej, gdybyś zadał to pytanie w naszym serwisie pytań i odpowiedzi o nazwie Zapytaj DesdeLinux aby cała społeczność mogła Ci pomóc w rozwiązaniu Twojego problemu.

      Uścisk, Pablo.

  27.   aj powiedział

    dobry post.
    Jakie jest polecenie dla każdego terminala, aby dodać zadania do tabeli crontab (bez wchodzenia do tabeli crontab i dodawania ich ręcznie za pomocą „crontab -e” lub zastępowania tabeli crontab inną tabelą crontab z „plikiem crontab”).
    Pomysł polega na utworzeniu zewnętrznego skryptu, który doda zadania do tabeli crontab
    dzięki

    1.    david powiedział

      wydaje mi się, że możesz użyć 'echo', cokolwiek chcesz dodać '| cat >> 'ścieżka cronotab (/ etc / cronotab)' «

  28.   Raphael Vera powiedział

    W jaki sposób wyrażenie byłoby uruchamiane dokładnie co 3 dni

  29.   José Antonio powiedział

    Hey.

    Mam problem z wykonywaniem zadania cron.

    Uruchamiam następujące zadanie z cronta -e:

    01 * * * * root /home/user/script/myfile.sh

    ale zadanie nie zostało wykonane. Sprawdziłem, czy plik myfile.sh ma uprawnienia do wykonywania i czy użytkownik, który go wykonuje, jest rootem.

    Uruchamiam to samo zadanie w / etc / crontab i po zrestartowaniu usługi też nie działa.
    Zawartość myfile.sh to polecenie aktualizujące bazę danych i jeśli uruchomię je w konsoli, to działa.
    masz jakiś pomysł, jaki może być problem?

    1.    Fredd powiedział

      Prawdopodobnie użytkownik bazy danych nie ma wszystkich uprawnień i najpierw trzeba będzie wyeksportować zmienne środowiskowe z silnika bazy danych.
      Na przykład w db2 ta linia przechodzi na początek skryptu
      . / home / db2inst1 / sqllib / db2profile

      Inną przyczyną może być to, że skrypt wymaga połączenia z bazą danych, nawiąż połączenie z bazą danych w skrypcie

  30.   LA3 powiedział

    Nie wiedziałem, że muszę ponownie uruchomić crond, walczyłem z tym przez jakiś czas

  31.   kenia powiedział

    Będą wiedzieć, jak wskazać, że zadanie jest uruchamiane pod koniec miesiąca, we wskazanym czasie .. szczegół jest taki, że nie mogę tego osiągnąć, skąd wiem, że zajmuje to ostatni dzień każdego miesiąca .. ??? Musiałem je zapisywać pojedynczo, ale kiedy nadchodzi koniec lutego, to jest bicie, więc to dla mnie skomplikowane ..

  32.   Jezus powiedział

    dobry dzień!!

    Jak zatrzymać proces wykonywany w tabeli crontab?

  33.   Jezus powiedział

    proces * …………

  34.   Julianna powiedział

    Czy to możliwe, że możesz mi pomóc? Skrypt eu tenho um autorstwa minha, który nie działa bez pliku crontab! Jb dei wszystkie uprawnienia, a nie konkretny cron lub użytkownik, który może to wykonać - prawie nic się nie dzieje! Chciałbym wiedzieć, czy możesz mi pomóc, niektóre inne rzeczy działają bez crona! Vlws

  35.   Anthox powiedział

    Jak umieściłbyś zadanie uruchamiane każdego ostatniego dnia miesiąca (dni: 31-30-28)?

  36.   tfercho powiedział

    Jak już wiesz, polecenie su służy do zmiany użytkownika w konsoli. Jeśli użyję polecenia su to: "twój użytkownik" zmień użytkownika, ale bez odpowiednich ustawień "użytkownik", jeśli uruchomię su jako: "su - użytkownik" zmień użytkownika, ładując ustawienia użytkownika. W cronie wskazuję użytkownika, ale jak załadować ustawienia tego użytkownika?

  37.   Rabować powiedział

    A jeśli chcę to zatrzymać?

  38.   Reg powiedział

    Cześć,
    Nie wiem, co robię źle, ale postępuję zgodnie z instrukcjami i nic nie jest wykonywane. Próbowałem:
    59 * * * * / usr / bin / gedit
    * * * * * / usr / bin / gedit
    * * * * * root / usr / bin / gedit
    * * * * * usr / bin / test.sh
    * * * * * root usr / bin / test.sh

    i nic. Niczego nie wykonuje. Zrestartowałem i wszystko.

  39.   Ferkos powiedział

    Dziękuję bardzo