Найти в Дзене
Заметки IT-инженера

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

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

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

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

Предположим у нас есть небольшой скрипт на Python, который использует собственное виртуальное окружение venv, содержащее все необходимые библиотеки для работы. Сделать из такого скрипта сервис на Linux можно выполнив следующие шаги:

  1. Создаем файл сервиса в соотвествующей папке systemd: /etc/systemd/system/app-service.service. Название данного файла определит название создаваемого сервиса - app-service. Содержимое файла будет выглядеть примерно так:[Unit]
    Description=Our app description. Use english to avoid cyrillic encoding problems

    [Service]
    User=user1
    WorkingDirectory=/home/user1/python_projects/app
    ExecStart=/home/user1/python_projects/app/.venv/bin/python /home/user1/python_projects/app/app.py

    [Install]
    WantedBy=multi-user.target
    user1 - Пользователь Linux с домашним каталогом в папке /home/user1
    /home/user1/python_projects/app - Рабочая директория скрипта, содержащая исходный код (app.py) и виртуальное окружение (.venv)
    WantedBy=multi-user.target - параметр, отвечающий за момент загрузки нашего сервиса при старте системы. Это самое распространенное значение для пользовательских сервисов
  2. Регистрируем сервис в systemd и разрешаем его запуск. И затем запускаем его:systemctl enable app-service
    systemctl start app-service
  3. Чтобы посмотреть состояние нашего сервиса и перезапустить его при необходимости, можно использовать следующие команды:systemctl status app-service
    systemctl restart app-service
  4. Данная команда повлияет только на конфигурацию при следующих запусках сервиса. Поэтому если мы хотим, чтобы изменения применились в уже работающим экземпляре, его необходимо будет перезапустить.Если мы захотим поменять что-то в ранее созданном нами файле сервиса app-service.service, например добавить какие-то параметры запуска для нашего скрипта, то после внесения изменений достаточно выполнить единственную команду:systemctl daemon-reload