У меня есть веб-сайт, требующий запуска нескольких процессов (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
Если для некоторых сайтов требуются нестандартные настройки единиц измерения по сравнению с остальными, используйте вставки:
[email protected]
– общий шаблон[email protected]/overrides.conf
– дополнительные параметры только для клиента 1
Шаблоны, вставки и расширения, такие как %i, описаны вsystemd.единица(5).