Raspberry Pi - это мощный одноплатный компьютер (SBC), который можно использовать для различных приложений и проектов. Его универсальность заключается в его способности запускать все виды программ, включая пользовательские скрипты, отчасти благодаря ОС Raspberry Pi и другим операционным системам на базе Linux, которые она запускает.

Запустить сценарий или программу на Raspberry Pi так же просто, как найти их в системе и запустить. Но что, если вы хотите автоматизировать этот процесс, возможно, потому что этого требует ваш проект или вы хотите оптимизировать рабочий процесс?

Один из ответов на этот вопрос - научиться использовать systemd.

Что такое Systemd?

systemd - это набор системных компонентов для настройки и поведения служб в современных системах Linux. Это отождествляется с PID (идентификатор процесса) из 1, поскольку это первый процесс, загружающийся при запуске системы. В целом цель systemd - помочь вам в управлении программами и их выполнении при запуске системы. И это то, что вы будете использовать для запуска своей программы при запуске на Pi.

instagram viewer

Как упоминалось ранее, существует несколько методов запуска программ при запуске в системах Linux, таких как rc.local, cron и autostart. Однако systemd может оказаться лучшим решением, если вы хотите запускать программы с графическим интерфейсом пользователя (GUI), автоматизировать запуск приложений после запуска определенных системных процессов или запускать программы снова и снова до тех пор, пока вы не составите расписание. работает.

Связанный: Как планировать задачи в Linux с помощью Cron и Crontab

Как использовать systemd для запуска программ при запуске

systemd - это немного более сложный метод запуска программ при запуске в системах Linux. Однако гибкость планирования, которую он предлагает по сравнению с другими методами - теми, о которых мы упоминали выше, - полностью перевешивает его сложность во всех аспектах.

Метод systemd использует файлы модулей, которые похожи на файлы .ini, которые содержат информацию о кодировке устройств, служб, сокетов, цели запуска и других важных компонентов системы.

Юнит-файлы бывают разных типов. Итак, в зависимости от того, какой тип ресурса вы хотите объявить, вам необходимо выбрать соответствующий тип файла модуля. Однако в рамках этого руководства мы будем придерживаться файлов юнитов .service, которые позволяют вам управлять поведением запуска программ и сценариев в системе.

Ниже приводится разбивка шагов, связанных с запуском скрипта / программы при запуске с использованием systemd.

Создание Сервиса

Чтобы программа запускалась при запуске, создайте файл служебного модуля, который сообщит systemd, какую программу запускать и когда. Вот как это сделать.

  1. В окне интерфейса командной строки введите sudo nano /lib/systemd/system/display.service. Вы можете использовать любое имя для своей службы, если оно заканчивается расширением .service.
  2. В служебный файл вставьте следующие строки кода:
    [Ед. изм]
    Описание = PiCounter
    После = network.target
    [Услуга]
    ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
    Перезагрузка = всегда
    Пользователь = пи
    [Установить]
    WantedBy = multi-user.target

Все ваши общие параметры конфигурации подпадают под Ед. изм а также Установить разделов, а параметры конфигурации для конкретных услуг - в разделе «Сервис».

Некоторые из вышеперечисленных пар директива-значение, которые вам может потребоваться изменить, включают:

я. После: Он определяет, когда запускать службу. Установив его на network.target гарантирует, что указанное значение - в данном случае network.target - начинается до начала текущего блока. Однако он не устанавливает отношения зависимости для запуска службы; это делается с помощью других директив, таких как Wants, Requires и WantedBy.

Конечно, вы можете изменить это значение в соответствии с требованиями вашего проекта. Например, если вы хотите, чтобы ваша программа выполнялась после подключения Raspberry Pi к сети, вы можете использовать network-online.target значение. Вы можете обратиться к Документация Fedora по systemd чтобы узнать больше об этих ценностях.

II. ExecStart: Он содержит абсолютный путь и имя программы / сценария, которые вы хотите выполнить при запуске. Итак, в зависимости от того, что вы хотите выполнить, вам необходимо добавить значения для обеих этих директив.

iii. Пользователь: Он определяет имя вашего Raspberry Pi. Если вы изменили имя своего Pi, вам нужно указать это значение для пользователя.

iv. Разыскивается Это наиболее распространенный способ указания триггера для юнита. Установив его на multi-user.target, вы можете установить отношения зависимости, которые будут запускать программу, когда управление системой передается многопользовательской оболочке.

Более того, это также запускает вашу программу до запуска системы Pi X-Windows, что означает, что ваша программа запускается даже до того, как вы войдете в систему. Если вы хотите, чтобы сценарий запускался до того, как вы войдете в свой Raspberry Pi, это позволит вам это сделать.

Приведенные выше строки кода подходят для программ без графического интерфейса. Однако, если вы хотите запустить программу с графическим интерфейсом пользователя с помощью systemd, вам следует добавить следующий код в свой служебный файл:

[Ед. изм]
Описание = PiCounter
После = network.target
[Услуга]
Окружающая среда = Дисплей =: 0
Среда = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Перезагрузка = всегда
[Установить]
WantedBy = multi-user.target

В приведенной выше паре директива-значение все, что вам нужно изменить, - это значение для ExecStart директива. Замените код в кодовом блоке программой, которую вы хотите запустить при запуске. После того, как вы заполнили служебный файл, нажмите CTRL + O чтобы спасти его.

Протестируйте службу

Когда служба готова, вручную проверьте, работает ли она. Для этого введите в терминале следующую команду: sudo systemctl start display.service. Сервис должен успешно выполнить ваши инструкции.

Как только это произойдет, прекратите его с помощью sudo systemctl stop display.service.

Включить службу

Если вам удалось успешно запустить свою программу с помощью службы, пора включить ее, чтобы она выполняла вашу программу автоматически каждый раз, когда вы загружаете Raspberry Pi.

Для этого введите sudo systemctl включить display.service в окне терминала. И как только это будет сделано, введите перезагрузка sudo чтобы перезапустить Pi.

После загрузки Raspberry Pi systemd должен запустить вашу программу в соответствии с предоставленными вами инструкциями.

Автоматизация запуска программы при запуске на Raspberry Pi

Как и большинство систем Linux, Raspberry Pi OS также позволяет выполнять операции несколькими способами, и она остается верной и для планирования запусков программ. Итак, если вы хотите запускать программы / скрипты с графическим интерфейсом при запуске и хотите лучше контролировать свое планирование, systemd - явно лучший метод.

Тем не менее, если вам нужно более простое решение или требования вашего проекта требуют определенного расписания, вы можете проверить наше руководство по Запуск программы или сценария Raspberry Pi при запуске Узнать больше.

Электронное письмо
Шпаргалка по командам Ultimate Raspberry Pi

Хотите получить больше от своего Raspberry Pi? Вот множество полезных команд для навигации по терминалу Pi и программирования его контактов GPIO.

Читать далее

Похожие темы
  • Сделай сам
  • Raspberry Pi
Об авторе
Яш Вате (Опубликовано 8 статей)

Яш - штатный писатель в MUO по DIY, Linux, программированию и безопасности. Прежде чем найти свое увлечение писательством, он занимался разработкой для Интернета и iOS. Вы также можете найти его работы на TechPP, где он освещает другие темы. Помимо технологий, он любит говорить об астрономии, Формуле-1 и часах.

Ещё от Yash Wate

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Еще один шаг…!

Пожалуйста, подтвердите свой адрес электронной почты в электронном письме, которое мы вам только что отправили.

.