Praktycznie każdy automatyk, prędzej czy później, trafi na potrzebę cyklicznego uruchamiania zadań. Problem ten przybiera wiele form, więc rozwiązania są realizowane w różny sposób np. harmonogram zadań w Windowsie, tzw. joby w bazach danych lub cron (command run on) w Linuxie.
W trakcie realizacji mojego projektu monitorowania temperatury w chacie potrzebowałem mechanizmu uruchamiającego mój skrypt co kilka, kilkanaście lub kilkadziesiąt minut. Od razu przyszło mi do głowy rozwiązanie, które znałem z systemów Linux. Mój projekt oparty jest na Raspberry PI z zainstalowanym Raspbianem, więc pomyślałem, że nie powinno być z tym problemów.
Cron – proces i jego uruchomienie
Rozpocząłem od sprawdzenia statusu cron’a na moim systemie:
/etc/init.d/cron status

Tak się złożyło, że cron jest i działa na moim systemie. Dorzucam od razu komendę jakby ktoś potrzebował doinstalować graficzny interfejs.
sudo apt install gnome-schedule
Ja wolę działać w konsoli, więc od razu podaję najbardziej przydatne polecenia.
Do rozpoczęcia modyfikacji tablicy z zadaniami cron’a:
sudo crontab -e
i do podglądu zadań:
sudo crontab -l
Nie będę rozpisywał się o formatowaniu wpisów w tablicy cron’a, bo opis można to znaleźć praktycznie wszędzie. Podam za to kilka przydatnych dla mnie przykładów, uruchamianie co:
- 5 minut: */5 * * * * /home/pi/script.sh
- godzinę o równej godzinie: 0 * * * * /home/pi/script.sh
- dzień o północy: 0 0 * * * /home/pi/script.sh
Można samemu przygotować zestaw reguł w oparciu o stronę: https://crontab.guru/#*
Zakończenie
Na koniec jeszcze chciałbym dorzucić kilka przydatnych kawałków kodu:
- Jak wykonać logi:
* * * * /home/pi/script.py >> ~/cron.log 2>&1
- Uruchomienie skryptu podczas startu systemu:
@reboot python /home/pi/script.py
- Jak uruchamiać skrypt podczas startu systemu i nie blokować procesu uruchamiania
@reboot python /home/pi/script.py &
Jeśli jesteś zainteresowany podobnymi tematami napisz o tym. Tymczasem, tym wpisem zbieram kilka istotnych informacji i zapraszam do innych artykułów na blogu i na facebooka.
[responsivevoice_button voice=”Polish Female” buttontext=”Odtwórz” ]