Создание сервиса в Linux чаще всего связано с использованием systemd — современной системы инициализации и менеджера служб, которая применяется в большинстве современных дистрибутивов (Ubuntu, Debian, RHEL, CentOS и др.).
Основы работы с systemd
Сервис в systemd определяется в конфигурационном файле с расширением .service. Такие файлы обычно располагаются в каталогах
|
1 |
/etc/systemd/system/ |
(для пользовательских сервисов) или
|
1 |
/lib/systemd/system/ |
(для системных установленных сервисов)
Конфигурационный файл состоит из нескольких секций:
- [Unit] — содержит метаданные и зависимости сервиса (описание, информация о зависимостях от других сервисов и т. д.).
- [Service] — определяет параметры запуска: команду для выполнения, политику перезапуска, опции времени выполнения и т. п.
- [Install] — указывает, при каких условиях сервис должен быть запущен (например, при загрузке системы).
Пример базового файла сервиса
Создадим файл
|
1 |
/etc/systemd/system/my-custom.service |
с базовым содержимым:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=My Custom Service After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/my-script.py Restart=always User=myuser Group=mygroup [Install] WantedBy=multi-user.target |
Объяснение секций:
- Description — краткое описание сервиса.
- After — указывает, что сервис должен запускаться после достижения цели
1network.target
(то есть после того, как сеть будет готова).
- ExecStart — команда для запуска сервиса (например, путь к исполняемому файлу и аргументы).
- Restart — политика перезапуска:
1always
означает автоматический перезапуск при сбое,
1on-fault— только если состояние выхода не равно 0.
- User и Group — указывают пользователя и группу, под которыми должен работать сервис (это важно для безопасности).
- WantedBy — определяет, при какой цели загрузки должен запускаться сервис (например,
1multi-user.target
— обычный многопользовательский режим).
Этапы создания и управления сервисом
- Создание файла сервиса. Откройте новый файл в нужном каталоге и заполните его необходимыми настройками.
- Обновление конфигурации systemd. После сохранения файла выполните команду:
sudo systemctl daemon-reload
Это заставит systemd перечитать конфигурационные файлы. dev.tolinuxier.com 3. Активация и запуск сервиса. Чтобы сервис запускался автоматически при загрузке системы, используйте:
sudo systemctl enable my-custom.service
Для немедленного запуска:
sudo systemctl start my-custom.service
Проверка статуса. Чтобы убедиться, что сервис работает, можно проверить его статус:
sudo systemctl status my-custom.service
Также для просмотра логов можно использовать
|
1 |
journalctl |
Некоторые важные параметры и рекомендации
- Type= — определяет тип запуска сервиса. Например,
1simple
(по умолчанию) подходит для большинства приложений, которые становятся полезными сразу после запуска бинаря. habr.com
- ExecStart — должна быть указана абсолютная путь к исполняемому файлу или команде. habr.com
- Переменные окружения можно задавать отдельно через
1Environment=
или
1EnvironmentFile=. habr.com
- Зависимости между сервисами можно явно указывать с помощью директив
1After=
,
1Requires=и других. statuser.cloud
- При настройке перезапуска стоит учитывать, что по умолчанию systemd прекращает перезапуск, если служба не запускается более 5 раз в течение 10 секунд. Иногда полезно устанавливать параметр
1RestartSec
(время ожидания перед попыткой перезапуска). github.com
При разработке сервиса важно учитывать не только базовые требования, но и вопросы безопасности, логирования и интеграции с другими компонентами системы.