W tym artykule wyjaśnimy planowanie zadań i uruchamianie skryptów w regularnych odstępach czasu przy użyciu zadań cron.
Co to jest Cron?
Cron to program do planowania zadań, który działa w tle jako proces. Może być używany do okresowego uruchamiania niektórych zadań, które są zaplanowane przy użyciu predefiniowanego zestawu reguł. Cron jest preinstalowany w większości dystrybucji Linuksa lub dostępny w repozytoriach do ręcznej instalacji.
Presety Crona
Cron na Ubuntu zawiera zestaw predefiniowanych harmonogramów. Możesz je sprawdzić, uruchamiając poniższe polecenie:
$ ls /etc/cron.*Zwykle te foldery to „/etc/cron.co godzinę”, „/etc/cron.codziennie”, „/etc/cron.miesięcznie” i „/etc/cron.tygodniowo".
Po prostu umieść żądane skrypty w jednym z tych folderów, aby uruchamiać automatyczne zadania co godzinę, codziennie, co miesiąc lub co tydzień.
Zauważ, że cron domyślnie używa powłoki „/bin/sh”. Jeśli chcesz użyć „/bin/bash” jako powłoki w skryptach cron, musisz użyć „!# /bin/bash” hashbang na górze pliku skryptu lub zdefiniuj powłokę jako zmienną „SHELL=/bin/bash” w pierwszym wierszu zaplanowanego skryptu bash. Nadpisanie zmiennej środowiskowej „SHELL” działa również w edytorze crontab wyjaśnionym poniżej.
Nie wszystkie zmienne środowiskowe systemu mogą być narażone na zadania cron. Dlatego ogólnie dobrym pomysłem jest ręczne zdefiniowanie ważnych zmiennych środowiskowych w skrypcie zaplanowanym przez cron.
Crontab
Crontab umożliwia definiowanie własnych zaplanowanych zadań. Możesz go użyć do skonfigurowania harmonogramów crona innych niż cztery standardowe ustawienia crona opisane powyżej.
Aby ustawić zaplanowane zadanie w crontab, najpierw uruchom edytor crontab za pomocą poniższego polecenia:
$ crontab -eTeraz na końcu pliku możesz dodać wpis w następującym formacie:
minuta godzina dzień miesiąc dzień tygodnia /pełna/ścieżka/do/skryptu.ciiGdzie:
- minuta: dowolna wartość z zakresu od 0 do 59
- godzina: dowolna wartość z zakresu od 0 do 23, gdzie 0 oznacza północ
- dzień: dowolna wartość z zakresu od 1 do 31
- miesiąc: dowolna wartość z zakresu od 1 do 12
- dzień tygodnia: dowolna wartość z zakresu od 0 do 6, gdzie 0 to niedziela
Poniższy wpis crontab zrobi zrzut ekranu twojego pulpitu i zapisze go w twoim katalogu domowym raz o godzinie 15:13 2 marca oraz w każdy wtorek marca o godzinie 15:13.
13 15 2 3 2 mosznaAby wyświetlić wszystkie wpisy crontab, użyj poniższego polecenia:
$ crontab -lWięcej przykładów
Zadania Crona można najlepiej wyjaśnić na przykładach, więc poniżej znajduje się kilka przykładów, które będą okresowo wykonywać zrzuty ekranu z pulpitu i przechowywać je w folderze domowym.
Oprócz pięciu zmiennych planujących, cron używa również specjalnego ciągu do planowania zadań. Te ciągi to:
- @hourly: zadanie jest uruchamiane co godzinę
- @daily / @midnight: zadanie jest uruchamiane codziennie
- @weekly: zadanie uruchamia się raz w tygodniu
- @co miesiąc: zadanie uruchamiane raz w miesiącu
- @yearly / @anually: praca uruchamiana raz w roku
- @reboot: zadanie uruchamia się raz przy każdym restarcie / logowaniu
Poniższy wpis crontab wykona zrzut ekranu raz przy każdym ponownym uruchomieniu:
@reboot scrot scMożesz zastąpić „@reboot” dowolnym innym specjalnym ciągiem wymienionym powyżej.
Użycie gwiazdki lub symbolu wieloznacznego w miejsce dowolnej z pięciu zmiennych spowoduje powtórzenie zadania we wszystkich nowych wystąpieniach tej zmiennej. Poniższy wpis będzie robił zrzut ekranu co minutę:
* * * * * mosznaCo godzinę:
0 * * * * mosznaCodziennie o 18:00:
0 18 * * * mosznaCo miesiąc 6 dnia o godzinie 18:00:
0 18 6 * * mosznaUżyj „/”, aby uruchamiać skrypt w stałych odstępach 30 minut (uruchamiany co 30 minut):
*/30 * * * * mosznaMożesz użyć zmiennych oddzielonych przecinkami, aby zdefiniować powtarzanie wykonywania skryptu w regularnych odstępach czasu. Poniższy przykład wykona zrzut ekranu Twojego pulpitu co 1, 4 i 5 minutę nowej godziny.
1,4,5 * * * * mosznaWeryfikowanie wpisów Crontab
Definiowanie wpisów crontab może być trudne, ale debugowanie ich lub sprawdzanie, czy działają z poprawnymi znacznikami czasu, jest jeszcze trudniejsze. Jedną z opcji jest użycie maszyny wirtualnej i zapisanie znaczników czasowych skryptu uruchamianego okresowo na zadaniu cron, dołączając coś takiego jak polecenie „data” i przekierowując dane wyjściowe do pliku tekstowego. Jednak lepszym rozwiązaniem jest skorzystanie z jednej z wielu internetowych usług testowania zadań cron dostępnych w sieci. Polecam udostępnienie strony z testerem cron tutaj próba.
Wniosek
Uruchamianie zadań cron to doskonały sposób na automatyzację powtarzających się zadań, zwłaszcza na serwerach. Narzędzie jest niezwykle wydajne i można je dostosowywać. Jednak ważne jest, aby upewnić się, że definicja harmonogramu działa poprawnie, szczególnie w przypadku zadań o znaczeniu krytycznym.