Создание сервиса в Linux
Создание сервиса в Linux
Иногда возникает необходимость сделать из какого-нибудь скрипта или небольшого приложения сервис под управлением ОС Linux, чтобы превратить простой исполняемый файл в устойчивую систему, не боящуюся отказов и перезагрузки сервера.
Предположим у нас есть небольшой скрипт на Python, который использует собственное виртуальное окружение venv, содержащее все необходимые библиотеки для работы. Сделать из такого скрипта сервис на Linux можно выполнив следующие шаги:
- Создаем файл сервиса в соотвествующей папке 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.targetuser1- Пользователь Linux с домашним каталогом в папке/home/user1/home/user1/python_projects/app- Рабочая директория скрипта, содержащая исходный код (app.py) и виртуальное окружение (.venv)WantedBy=multi-user.target- параметр, отвечающий за момент загрузки нашего сервиса при старте системы. Это самое распространенное значение для пользовательских сервисов
- Регистрируем сервис в
systemdи разрешаем его запуск. И затем запускаем его:systemctl enable app-service systemctl start app-service - Чтобы посмотреть состояние нашего сервиса и перезапустить его при необходимости, можно использовать следующие команды:
systemctl status app-service systemctl restart app-service - Если мы захотим поменять что-то в ранее созданном нами файле сервиса
app-service.service, например добавить какие-то параметры запуска для нашего скрипта, то после внесения изменений достаточно выполнить единственную команду:Данная команда повлияет только на конфигурацию при следующих запусках сервиса. Поэтому если мы хотим, чтобы изменения применились в уже работающим экземпляре, его необходимо будет перезапустить.systemctl daemon-reload