Автозапуск кода на Raspberry Pi через сервисы
Я уже писал об автозапуске скрипта на Raspberry Pi через запись в rc.local. Однако этот способ имеет несколько недостатков:
- если скрипт выводит какую-либо информацию или сообщение об ошибке, эта информация нигде не отобразится;
- если скрипт «рухнул» об этом невозможно узнать и перезапустить скрипт;
- нет простого способа остановить или перезапустить скрипт.
Вот тут нам придет на помощь механизм управления службами systemd. Давайте попробуем запустить как сервис простейший скрипт на Python.
Напишем простейший скрипт, который каждую секунду выводит фразу «Hello world!»:
import time
import sys
while True:
print «Hello world!»
sys.stdout.flush()
time.sleep(1)
Сохраним файл в папку /home/pi под именем run-as-service.py и делаем его исполняемым:
Для того, чтобы systemd знал, что мы хотим делать с нашим сервисом, надо создать файл юнита:
Description=My service to say Hello world
After=systemd-user-sessions.service
[Service]Type=simple
ExecStart=/home/pi/run-as-service.py
Сохраним его под именем hello.service и скопируем в /etc/systemd/system:
Всё готово!
Теперь мы можем запускать сервис:
… смотреть его статус:
… остановить:
… посмотреть активен ли сервис:
Для того, чтобы сервис стартовал автоматически после загрузки системы необходимо выполнить:
Удалить из автозагрузки:
Посмотреть, включен ли сервис для автозапуска при загрузке системы:
Посмотреть, что там выводит наш скрипт можно командой:
Вообще этот метод автозапуска скрипта на Raspberry Pi и управление им мне очень понравился именно из-за возможности управлять скриптом и отслеживать его состояние.
Если кому интересно развитие темы systemd, то подробно о ней прочитать можно тут.