Spis treści:
Raspberry Pi – autostart i ponowne uruchamianie
Istnieje wiele sposobów na auto-uruchamianie programów podczas ładowania systemu lub logowania się. Między innymi ‘cron’, ‘init’, Gnome Scheduler, jednak w najnowszej wersji Raspbian dodano nową, o nazwie ‘systemd’.
systemd
Jest to w rzeczywistości pakiet aplikacji używanych do zarządzania systemem operacyjnym. W tej funkcji można skonfigurować ‘service’ (program), którym systemd będzie automatycznie zarządzał. Więc jeżeli np. program przestanie odpowiadać, systemd zapewni RPI autostart. Funkcja ta jest szczególnie przydatna, jeśli Raspberry Pi jest używane do monitorowania czegoś lub do rejestrowania pomiarów i nie chcesz niczego przeoczyć, lub używasz robota opartego na Raspberry Pi, a awaria programu sterującego oznaczałaby utratę kontroli. Autostart Raspberry to sposób na łatwy i szybki reset programu, który nie spowoduje utraty danych czy zamknięcia programu. Z kolei Raspberry Pi autorun to możliwość automatycznego rozpoczęcia działania programu wraz ze startem systemu, co pozwala na optymalizację czasu, którego już nie trzeba przeznaczać na manualne otwieranie każdej aplikacji z osobna.
Konfiguracja
W tym przykładzie uruchomimy skrypt napisany w pythonie uruchamiany za każdym razem podczas startu systemu w Raspberry Pi. Ten skrypt służy do sterowania robotem, który nie ma wejścia na ekran, czy klawiaturę, więc uruchomienie programu przy starcie systemu jest niezbędne. Umieściłem skrypt w katalogu domowym użytkowników ‘pi’:
/home/pi/DriveRobot.py
systemd używa plików konfiguracyjnych zwanych ‘unit’, aby powiedzieć im co mają robić. Stwórzmy jeden dla naszego robota. Otwórz okno terminala i wpisz następujące komendy:
sudo nano /lib/systemd/system/driverobot.service
Teraz wpisz to:
[Unit]
Description=DriveRobot Service
After=multi-user.target
[Service]
Type=idle
User=pi
ExecStart=/usr/bin/python3 /home/pi/DriveRobot.py
Restart=always
RestartSec=0
[Install]
WantedBy=multi-user.target
W tym pliku unit znajdują się 3 sekcje:
- Sekcja [Unit] zawiera dwie wartości:
- nazwę wartości usługi („Description”)
- Kiedy system się ładuje, usługa powinna wystartować (‘After’). W tym przypadku będzie ona uruchamiana po zakończeniu procesu systemd ‘multi-user’, tj. na etapie, w którym konta użytkowników są dostępne w systemie. To jest przed załadowaniem Raspbian Desktop, więc jeżeli twoje Raspberry ładuje się w trybie Desktop i chcesz żeby twój program ładował się w interfejsie użytkownika na pulpicie, musisz zmienić to na „graphical.target”.
- Sekcja [Service] konfiguruje to co będzie uruchamiane i co ma zrobić jeżeli program przestanie odpowiadać lub się wyłączy.
- Opcja ‘Type’ i ‘idle’ mówią systemd, żeby czekał aż wszystkie inne usługi zostaną wykonane. Nie spowalnia to rozruchu systemu.
- ‘User’ definiuje, którego użytkownika program będzie działał. W tym przypadku, standardowo użytkownik ‘pi’.
- ‘ExecStart’ jest plikiem wykonywalnym. W tym przypadku python3 uruchamia skrypt DriverRobot.py. Zwróć uwagę na to, że musisz podać pełną ścieżkę programu, który uruchamiasz (python3) oraz skryptu.
- ‘Restart’ ustawione na ‘always’ mówi systemd, żeby monitorował proces startu i jeżeli się wyłączy, zresetował go.
- ‘RestartSec’ mówi systemd, żeby zaczekał 0 sekund przed restartem programów, jeżeli się wyłączy.
- Finalna sekcja [Install] posiada dyrektywę ‘WantedBy’. Oznacza to, że usługa driverobot będzie luźno powiązana z usługą dla wielu użytkowników – zostanie uruchomiona po pomyślnym uruchomieniu usług wielu użytkowników.
Po zapisaniu należy zmienić uprawnienia pliku:
sudo chmod 644 /lib/systemd/system/driverobot.service
Co sprawi, że będzie mogła być odczytana przez wszystkich, ale zapisywana tylko przez właściciela.
Konfigurowanie systemd
Po utworzeniu pliku należy poinformować o tym systemd i uruchomić go, aby usługa driverobot była uruchamiana za każdym razem podczas uruchamiania Raspberry Pi. Wprowadź poniższe instrukcje:
sudo systemctl daemon-reload
sudo systemctl enable driverobot.service
Następnie uruchom ponownie Raspberry Pi.
Sprawdzanie statusu usługi driverobot
Kiedy Raspberry Pi uruchomi się ponownie, twój skrypt się uruchomi. Możesz to sprawdzić używając komendy systemctl:
sudo systemctl status driverobot.service
Powinna ona zwrócić coś takiego:
Testowanie ‘Crash’
Warto sprawdzić czy systemd będzie obsługiwał awarię kodu. Do zasymulowania tego należy wyłączyć (‘kill’) proces pythona, który uruchamia twój skrypt. Aby znaleźć identyfikator procesu, uruchom to:
ps -ax | grep driverobot
Komenda powinna zwrócić dwie linijki – jedna dla procesu python3 i jedna ‘grep’, którą właśnie uruchomiłeś. Identyfikatorem (pid) procesu jest pierwsza cyfra w linii.
Do zatrzymania twojego kodu, wpisz:
kill -9 xxx
Gdzie xxx to identyfikator procesu, który właśnie znalazłeś.
Teraz sprawdź czy twój program został zrestartowany, uruchamiając ponownie:
ps -ax | grep driverobot
Jeśli systemd wykonuje swoje zadanie poprawnie, powinieneś zobaczyć wciąż działający proces python3, ale tym razem z innym identyfikatorem procesu.
Teraz możesz uruchamiać swój kod lub dowolny program za każdym razem, podczas uruchamiania Rasberry Pi, i pozostawić go uruchomionym przez cały czas!
Jakie dodatkowe programy na Raspberry Pi warto zainstalować?
- Iceweasel (Firefox) – Przeglądarka
- Chromium (Chrome) – Przeglądarka
- Midori – Przeglądarka
- LibreOffice – Pakiet biurowy
- Inkscape – Program graficzny
- GIMP – Program graficzny
- Pinta – Program graficzny
- scrot – Zrzut ekranu
- mc – Midnight Commander – zarządzanie plikami
- 7zip – Kompresja danych
- Gparted – Program do zarządzania partycjami
Podstawowe komendy Raspberry Pi
Poznaj najpotrzebniejsze komendy na Raspberry Pi, dzięki którym Twoje urządzenie będzie działało jeszcze sprawniej. Są to między innym takie polecenia, jaki:
- df / -h – ilość miejsca na dysku dostępną na karcie SD
- free -h – informacje o użyciu pamięci
- date – aktualny czas
- sudo su – użytkownik root
- sudo raspi-config – uruchomienie programu Raspi-config, który umożliwia rekonfigurację systemu.
- sudo reboot – ponowne uruchomienie RPI
- sudo shutdown -h now – przygotowanie do wyłączenia
- exit – wylogowuje z bieżącej powłoki systemowej/sesji SSH
Jak zacząć więc przygodę z RPI? Aby umożliwić Raspberry Pi start, należy wgrać system operacyjny na USB lub kartę SD. Nie trzeba robić tego manualnie, bo powstały specjalne programy, które zrobią to za nas. Dodatkowo uprzednio sformatują one kartę, tak aby nic się na niej nie znajdowało. Nie jest to zaawansowana procedura, dlatego z pewnością poradzi z nią sobie nawet amator. Powodzenia!
Źródło: https://thepihut.com/blogs/raspberry-pi-tutorials/auto-starting-programs-on-the-raspberry-pi
Jak oceniasz ten wpis blogowy?
Kliknij gwiazdkę, aby go ocenić!
Średnia ocena: 4.8 / 5. Liczba głosów: 5
Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.
3 Responses
Szukam, instrukcji do automatycznego wyświetlania strony internetowej szkoły w fullscreen zaraz po uruchomieniu.
Dodam, że urządzenie to rpi3 plus telewizor podłączony przez hdmi.
“Komenda powinna zwrócić dwie linijki – jedna dla procesu python3 i jedna ‘grep’, którą właśnie uruchomiłeś. Identyfikatorem (pid) procesu jest pierwsza cyfra w linii.”
Tu chodzi raczej o liczbę. Małe szanse, żeby to faktycznie była cyfra…
Witam wszystkich,
mam pewien problem z usługą wykonywaną poprzez systemd. Mam kod programu który łączy się poprzez bluetoothctl dalej menu-gatt i bluez z danym urządzeniem. Program uruchamiany bezpośrednio z terminala działa jak należy niestety jako .service już nie. Polecenie “sudo systemctl restart sterowanie.service
” rozwiązuje problem lecz nie wiem jak dodać aby ta usługa restartowała się po każdym nowym uruchomieniu. Czy ktoś jest w stanie mi pomóc?
Pozdrawiam