Запустить любой выполняемый файл как службу в Linux

Запуск любого исполняемого файла в качестве службы Linux

Содержимое страницы

Вот набор инструкций по
Как настроить запуск любого исполняемого файла как службы в Linux с использованием Systemd.

linux cogs Выше приведено изображение, сгенерированное ИИ (модель Flux 1 dev) шестерёнок, представляющих подход DIY в Linux.

Systemd

Systemd — это инструмент управления системой и службами, а также инструмент инициализации в некоторых дистрибутивах Linux.

Некоторые популярные дистрибутивы с systemd:

  • Ubuntu 16.04 или новее
  • Debian Jessie или новее
  • Arch Linux
  • CentOS 7 / RHEL 7 или новее
  • Fedora 15 или новее

systemctl

systemctl — это утилита командной строки для управления systemd.

Список всех служб

Чтобы получить список всех служб, выполните команду:

systemctl list-units --type=service

Создание файла службы

Перейдите в директорию служб systemd и создайте новый файл с расширением .service:

sudo nano /etc/systemd/system/your_service_name.service

Настройка файла службы:

Добавьте следующее содержимое в файл, при необходимости измените значения:

[Unit]
Description=Описание вашей службы
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/путь/к/вашему/исполняемому/файлу/каталогу
ExecStart=/путь/к/вашему/исполняемому
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Сохраните и закройте файл.

Задержка запуска службы

Если вы подозреваете проблемы с таймингом при запуске службы, рассмотрите возможность добавления задержки в конфигурацию службы:

[Service]
ExecStartPre=/bin/sleep 10

Зависимости службы

Чтобы настроить зависимости вашей службы: в разделе [Unit] файла конфигурации службы,

добавьте следующие директивы:

Используйте After=, чтобы указать службы, которые должны запускаться до вашей службы:

After=network.target other_service.service

Используйте Requires=, чтобы определить жёсткие зависимости:

Requires=required_service.service

Используйте Wants= для мягких зависимостей:

Wants=optional_service.service

Перезагрузите systemd, чтобы система узнала о новой службе

sudo systemctl daemon-reload

Проверьте зависимости службы

sudo systemctl list-dependencies your_service_name.service

Включите службу для запуска при загрузке

sudo systemctl enable your_service_name.service

Чтобы проверить, настроена ли служба для запуска при загрузке:

sudo systemctl is-enabled your_service_name.service

Запустите службу

sudo systemctl start your_service_name.service
# или
sudo systemctl restart your_service_name.service

Проверьте статус службы

Если что-то пошло не так — проверьте логи и статус службы Linux:

sudo systemctl status your_service_name.service

или

sudo journalctl -u your_service_name.service

Для скриптов Python

ExecStart=/путь/к/conda/envs/my_env_name/bin/python /путь/к/исполняемому.py

Комментарии

Теперь вы можете управлять своей службой с помощью команд systemctl, таких как start, stop, restart и status.

Для исполняемых файлов, требующих параметров, измените строку ExecStart в файле службы соответствующим образом.

Например, если вам нужно запустить приложение Java, используйте полную команду Java в строке ExecStart.

Не забудьте настроить разрешения и владельца файлов как необходимо, и убедитесь, что у исполняемого файла есть правильные разрешения на выполнение.

Управление службами systemd с помощью chkservice

Вместо выполнения

sudo systemctl start some-serviceservice
# или
sudo systemctl restart some-serviceservice

Вы можете использовать консольный интерфейс. Простой и лёгкий

sudo apt-get install chkservice

sudo chkservice

Полезные ссылки