Systemd — широко используемая система инициализации и менеджер служб в Linux. При создании файла модуля службы systemd директивы ExecStart и ExecStop необходимы для определения команд запуска и остановки службы соответственно. В этой статье мы рассмотрим различные способы указания этих директив на примерах кода.
Метод 1: выполнение одной команды
Самый простой способ определить директивы ExecStart и ExecStop — указать одну команду. Например, давайте создадим службу, которая запускает и останавливает простой веб-сервер:
[Unit]
Description=Мой веб-сервер
[Service]
ExecStart=/usr/bin/python3 /path/to/server.py
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=always
Метод 2: использование сценариев оболочки
Вы также можете использовать сценарии оболочки для выполнения более сложных команд или дополнительных действий перед запуском или остановкой службы. Вот пример:
[Unit]
Description=Моя услуга
[Service]
ExecStart=/path/to/start.sh
ExecStop=/path/to/stop.sh
start.sh:
!/bin/bash
echo “Запуск службы…”
/path/to/service_command
stop.sh:
!/bin/bash
echo «Остановка моей службы…»
/path/to/stop_command
Метод 3: выполнение нескольких команд
Если вам нужно запустить несколько команд в рамках процесса запуска или остановки службы, вы можете использовать директивы ExecStartPre, ExecStartPost, ExecStopPre и ExecStopPost. Они позволяют указать команды, которые выполняются до или после основной команды запуска или остановки. Вот пример:
[Unit]
Description=Моя услуга
[Сервис]
ExecStartPre=/путь/к/команде перед запуском
ExecStart=/путь/к/команде запуска
ExecStartPost=/путь/к/команде после запуска
ExecStopPre=/path/to/pre-stop-command
ExecStop=/path/to/stop-command
ExecStopPost=/path/to/post-stop-command
Метод 4: использование переменных среды
Systemd позволяет вам определить переменные среды для вашего сервисного подразделения. Это может быть полезно при настройке команд ExecStart и ExecStop. Вот пример:
[Unit]
Description=Моя услуга
[Сервис]
Environment=MY_PATH=/path/to/service
ExecStart=${MY_PATH}/start.sh
ExecStop=${MY_PATH}/stop.sh
В этой статье мы рассмотрели различные методы определения директив ExecStart и ExecStop в файлах служебных модулей systemd. Если вам нужно выполнить одну команду, использовать сценарии оболочки, выполнить несколько команд или использовать переменные среды, systemd обеспечивает гибкость и универсальность. Используя эти методы, вы сможете эффективно управлять своими службами в среде Linux.