Как управлять службой systemd, которой требуется несколько процессов?

Как управлять службой systemd, которой требуется несколько процессов?

У меня есть веб-сайт, требующий запуска нескольких процессов (python, node и т. д.). В настоящее время у меня создана служба systemd, поэтому я могу легко запускать и останавливать эти процессы. Я создал скрипт запуска, который запускает все необходимые мне процессы как фоновые процессы (добавляя их &в конец команды).

Это не позволяет мне использовать функцию автоматического перезапуска systemd в случае сбоя, поскольку все процессы запускаются в рамках одного сценария.

Одно из возможных решений, которое я могу придумать, — это создать службу для каждого процесса, а затем связать их все вместе, создав главную службу, которая Requiresих. Я не фанат этого, потому что это означает, что мне нужно создать 4-5 служб для каждой среды этого веб-сайта, которую я хочу запустить.

Есть ли способ легко определить службу, которая запускает несколько процессов и контролирует каждый из них по отдельности?

решение1

Создайте несколькошаблонслужбы, которые имеют такие названия @:

Используя шаблоны, вы можете запустить именованный экземпляр для каждого веб-сайта:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

В таких шаблонных единицах вы можете использовать %iдля ссылки имя экземпляра (в данном примере — clientone). Таким образом, «основная» единица (служба или цель) может иметь:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

Если для каждого сайта требуется несколько параметров, вы можете загрузить их из файла:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

Если для некоторых сайтов требуются нестандартные настройки единиц измерения по сравнению с остальными, используйте вставки:

Шаблоны, вставки и расширения, такие как %i, описаны вsystemd.единица(5).

Связанный контент