1

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

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

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

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

1 ответ1

1

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

  • website@.service
  • pythonthingy@.service
  • nodethingy@.service

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

systemctl start pythonthingy@clientone.service nodethingy@clientone.service
systemctl start pythonthingy@clienttwo.service nodethingy@clienttwo.service

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

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

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

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

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

  • pythonthingy@.service - общий шаблон
  • pythonthingy@clientone.service.d/overrides.conf - дополнительные параметры только для клиента 1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .