Запустить любой выполняемый файл как службу в Linux
Запуск любого исполняемого файла в качестве службы Linux
Вот набор инструкций по
Как настроить запуск любого исполняемого файла как службы в Linux с использованием Systemd.
Выше приведено изображение, сгенерированное ИИ (модель 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