Envato Elements - pobierasz co chcesz, ile chcesz

Czasem potrzeba uruchomić jakieś polecenie, czy jakiś skrypt automatycznie, w z góry określonym momencie (czasie), i tu z pomocą przychodzi nam CRON – rodzaj systemowego harmonogramu zadań w systemie Linux, a tym samym w Raspberry Pi.

Nie będę opisywał całej struktury i zasady działania, gdyż w Internecie można znaleźć na ten temat wiele przystępnie napisanych poradników.

Ale jednak jakieś podstawy postaram się podać, tak by zostało w pamięci, że takie narzędzie istniej, i czasem może nam się przydać (np. kopie zapasowe, czy automatyczne aktualizacje systemu)

CRON i CRONTAB

W uproszczeniu Cron to usługa, która korzysta z tabel z zadaniami, tzw „crontab”

cron – uniksowy daemon zajmujący się okresowym wywoływaniem innych programów. Posługuje się on tabelami crontab do przechowywania informacji jakie zadanie ma uruchamiać.

Źródło: Wikipedia

Warto zacząć od sprawdzenia, czy w naszym systemie usługa działa. W tym celu korzystamy z polecenia:

/etc/init.d/cron status

raspberry-pi_cron_01

Jak widać – usługa działa:

[ ok] cron is running.

Zadania użytkownika

Jako użytkownik możemy zdefiniować zadania które system wykona automatycznie „w naszym imieniu” (z uprawnieniami naszego użytkownika) korzystając z polecenia:

crontab -e

raspberry-pi_cron_02

Otworzy nam się „plik tekstowy” w który możemy dodawać kolejne pozycje/polecenia.

Składnia wpisów jest następująca:

[minuty(0-59)] [godzina(0-23)] [dzień_miesiąca(0-31)] [miesiąc(1-12)] [dzień_tygodnia(0-7, 0/7-niedziela)] [polecenie]

* * * * * skrypt/polecenie

* * * * * skrypt/polecenie1; skrypt/polecenie2

Możemy stosować:

  • * – zawsze (każda minuta, każda godzina, każdy dzień, każdy miesiąc, każdy dzień tygodnia)
  • Zakres: x-y – czyli od „x” do „y”, np. „1-5” to każda minuta/godzina/dzień/miesiąc od 1 do 5
  • Przerwa: */x – np. „*/8” to polecenie wykonane co 8 minut/godzin/dni…
  • Kolejne wartości: x,y,z – np. „2,5,8” może oznaczać polecenie wykonane w 2, 5 i 8 minucie/godzinie…
  • Wiele zadań w jednym wpisie: ; rozdzielamy polecenia

Kilka przykładów, by lepiej zrozumieć zasadę budowy:

  • */5 * * * * [Co 5 minut]
  • 0 4 * * * [O 4 rano]
  • 0 5 * * 0 [O 5 rano w niedzielę (0 lub 7)]
  • 15 8,10 1-15 1 * [O 8:15 i 10:15, od 1 do 15 stycznia (1)]

W pewnych przypadkach (np. błędy) system może wysyłać na powiadomienie na e-mail (zależy od konfiguracji systemu). Możemy wyłączyć taką informację dla konkretnego zadania dodając:

>/dev/null 2>&1

na końcu linii z poleceniem, np.:

5 10 * * * skrypt_lub_polecenie >/dev/null 2>&1

Skrypt lub polecenie wykona się o 10:05 (codziennie), a ew. raport „poleci w kosmos”

Cron(tab) systemowy

Oprócz naszego, indywidualnego (użytkownika) istnieje też „systemowa” tabela zadań Cron.

sudo nano /etc/crontab

Budowa wpisów jest podobna do tabeli użytkownika, z tym, że dodatkowo między „kiedy” a „komenda/polecenie” należy podać użytkownika, w „imieniu którego” wykona się konkretne polecenie:

raspberry-pi_cron_04

Skrypty w katalogach cron.x

Kolejne miejsce związane z tematem to katalogi, w których znajdują się skrypty uruchamiane w określonych okresach.

Są to:

  • /etc/cron.daily – codziennie
  • /etc/cron.hourly – co godzinę
  • /etc/cron.weekly – raz w tygodniu
  • /etc/cron.monthly – raz w miesiącu

raspberry-pi_cron_03

Każdy skrypt który znajduje się w tych katalogach zostanie uruchomiony zgodnie z jego nazwą.

@reboot

Wprawdzie jest to element zarządzania kiedy ma się uruchomić dane polecenie czy skrypt, ale jest na tyle inne od pozostałych, że postanowiłem je wydzielić.

Za pomocą wpisu z @reboot otrzymacie możliwość uruchamiania polecenia/skryptu przy każdym uruchomieniu systemu. Np. by wyświetlić przy każdym uruchomieniu systemu komunikat „System uruchomiony” dodajemy do CRONa taką linijkę:

@reboot echo "System uruchomiony"

@reboot /ścieżka/do/skryptu &

@reboot wpisujemy jako określenie kiedy ma się uruchamiać skrypt, czyli zamiast „* * * * *”

Zarządzanie CRONem

Jeszcze kilak poleceń które mogą się przydać – restart usługi:

sudo /etc/init.d/cron restart

Ręczny start usługi:

sudo /etc/init.d/cron start

Ręczne zatrzymanie usługi:

sudo /etc/init.d/cron stop

/var/log/cron.log

Warto aktywować logi zadań CRON’a, zwłaszcza, gdy macie więcej wpisów i nie macie pewności, że wszystko idzie „Zgodnie z planem harmonogramem” ;-)

Zaczynamy od edycji pliku:

sudo nano /etc/rsyslog.conf

I szukamy linijki (~ nr 63):

#cron.* /var/log/cron.log

i zmieniamy na:

cron.* /var/log/cron.log

Teraz tylko restart „logera”:

sudo /etc/init.d/rsyslog restart

Log z zadań CRON’a będzie teraz zapisywany do pliku:

/var/log/cron.log

MAILTO

By się ustrzec – zwłaszcza jak mamy więcej, często uruchamianych zadań – niepotrzebnych „śmieci” w logach, np.:

MAIL (mailed 1 byte of output; but got status 0x0044, #012)

warto jeszcze dodać tablicach CRON’a:

crontab -e

następujący wpis:

MAILTO=""

I tu z doświadczenia powiem, że czasem może być potrzeba dodania tego wpisy dla wszystkich użytkowników, nawet tych co nie mają żadnych zadań.

Pewnie nie zaszkodzi dodać wpisu również do CRON’a systemowego:

sudo nano /etc/crontab

Pamiętajcie, o restarcie usługi na koniec:

sudo /etc/init.d/cron restart

Zobacz wszystkie artykuły z serii „Raspberry Pi”

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.
Młody Szymon dzięki motywowi Divi od Elegant Themes zrobił stronę dla firmy ojca
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Młody Szymon powiedział tacie o promocji dla czytelników WebInsider.pl i zaoszczędzili 80% na księgowości internetowej wFirma