![]() |
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.
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!”
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:
Ugh… trochę zagmatwane.
* Brak / 30 (w polu minut), który jest uruchamiany co 30 minut ...
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.
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ę.
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ę.
Witam, bardzo przydatne informacje, aby wyjaśnić, jak działa cron.
Bajtów
dla *
Świetnie, dziękuję za wyjaśnienie, jak działa cron. Połóżmy małą dłoń 🙂
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
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!
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ł.
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
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ł.
Wejście jest doceniana.
10 punktów !!
cześć2!!
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.
Wujku bardzo dziękuję, czytałem i testowałem przykłady. bardzo dziękuję ... to bardzo zrozumiałe. Twoje zdrowie
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.
Znakomity, bardzo przydatny !!!
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
Brakowało zdefiniowania „mon” po tytule „Dodaj zadania do tabeli crontab”
Artykuł jest nadal ładny, cron jest niezwykle przydatny.
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
Chcę sprawdzić historię modyfikacji tego
jak mogę to zrobić
dzięki
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.
Więc jest. Dziękuję Ci!
Przytulić! Paweł
Chcę wiedzieć, jak utworzyć plik cron, aby móc określić czas za każdym razem, gdy jest wykonywany, katalog itp.
Dziękuję za wyjaśnienie operacji i podstawowych poleceń dla crona, teraz trochę się zabawię.
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
Dzięki Sander! Uścisk! Paweł.
dom = dzień miesiąca
dow = dzień tygodnia
łatwiej jest się kojarzyć
Dziękuję bardzo, bardzo kompletne i dobrze wyjaśnione.
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. -.
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. -
Cześć Marcelo!
Myślę, że byłoby lepiej, gdybyś zadał to pytanie w naszym serwisie pytań i odpowiedzi o nazwie Zapytaj w Linuxie aby cała społeczność mogła Ci pomóc w rozwiązaniu Twojego problemu.
Uścisk, Pablo.
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
wydaje mi się, że możesz użyć 'echo', cokolwiek chcesz dodać '| cat >> 'ścieżka cronotab (/ etc / cronotab)' «
W jaki sposób wyrażenie byłoby uruchamiane dokładnie co 3 dni
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?
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
Nie wiedziałem, że muszę ponownie uruchomić crond, walczyłem z tym przez jakiś czas
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 ..
dobry dzień!!
Jak zatrzymać proces wykonywany w tabeli crontab?
proces * …………
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
Jak umieściłbyś zadanie uruchamiane każdego ostatniego dnia miesiąca (dni: 31-30-28)?
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?
A jeśli chcę to zatrzymać?
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.
Dziękuję bardzo