Автозапуск Python-скриптов на Linux: настройка systemd
В данной статье мы рассмотрим, как настроить и запустить Python-скрипт, работающий в виртуальном окружении, в качестве системного сервиса.Недавно вышла статья [«Мониторинг интернет-соединения на Raspberry Pi:
Python-скрипт для автоматических уведомлений по почте»](https://echo-electronic-eon.ru/monitoring-internet-soedineniya-raspberry-pi-i-otpravka-uvedomlenij-po-pochte/), в которой мы написали скрипт для мониторинга интернет-соединения.
Однако, чтобы такой скрипт был по-настоящему полезен, его нужно запускать автоматически при загрузке системы и обеспечивать его непрерывную работу. В этой статье мы рассмотрим, как настроить наш Python-скрипт, работающий в виртуальном окружении, в качестве системного сервиса что позволит ему работать автономно и надежно.
Создание файла сервиса
Первым шагом является создание файла сервиса в системе.
Для этого выполним следующую команду
sudo nano /etc/systemd/system/network_check.service
Настройка файла сервиса
Разберем ключевые параметры:
-
Description: Краткое описание сервиса. -
After=network.target: Указывает, что сервис должен запускаться после запуска сетевых служб. -
ExecStart: Путь к интерпретатору Python в виртуальном окружении и путь к вашему скрипту. -
WorkingDirectory: Рабочая директория для запуска скрипта. -
Restart: Указывает systemd перезапускать сервис в случае сбоя. -
RestartSec: Время ожидания перед повторным запуском (в секундах). -
User: Пользователь, от имени которого будет запущен сервис. -
Environment: Устанавливает переменную окружения для вывода логов Python без буферизации.
Перезагрузка конфигурации systemd
После сохранения файла сервиса, необходимо перезагрузить конфигурацию systemd
sudo systemctl daemon-reload
Автозапуск сервиса
«Включаем» сервис, чтобы он автоматически запускался при загрузке системы
sudo systemctl enable network_check.service
Запуск сервиса
Теперь можно запустить сервис с помощью команды, чтобы он запустился «сейчас»
sudo systemctl start network_check.service
Проверка статуса сервиса
Чтобы убедиться, что сервис успешно запущен, выполним
sudo systemctl status network_check.service