Как запустить несколько команд systemd

я хочу несколько команд в файле myapp.service в systemd

[Unit]
Description=to serve myapp

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/myapp
ExecStart=/home/ubuntu/.local/bin/pserve production.ini http_port=5000
ExecStart=/home/ubuntu/.local/bin/pserve production.ini http_port=5001
Restart=always

[Install]
WantedBy=multi-user.target

он выдает ошибку, говоря о недопустимом аргументе. я хочу запустить две команды

pserve production.ini http_port=5000
pserve production.ini http_port=5001

Как я могу это сделать??


person which_part    schedule 27.06.2018    source источник


Ответы (1)


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

Если вы должны иметь его как единое целое, вы можете сделать одно из следующего (в моем порядке предпочтения):

  • сделайте два сервера отдельными единицами (обратите внимание, что вы можете использовать один и тот же файл конфигурации для обоих, поэтому они являются двумя «экземплярами» одной и той же службы — что имеет смысл, они запускают один и тот же сервер). У вас будет две записи в списке запущенных служб при запуске systemctl.

  • сделать этот блок одноразовым (запускает программу, которая завершает работу, не отслеживается и не перезапускается). Заставьте одноразовую команду запускать оба сервера в фоновом режиме, например,

    sh -c "{ сохранить production.ini http_port=5000 и сохранить production.ini http_port=5001 & } ‹/dev/null ›/dev/null ›&1"

  • сделайте скрипт, который запускает оба демона и наблюдает за ними, перезапуская их при необходимости и убивая их, когда он сам убивается. Затем вы делаете этот скрипт «демоном», который запускает systemd. Не стоит того, ИМО, потому что вы выполняете большую часть работы, для которой лучше всего подходит сам systemd. Конечно, вы можете запустить новую копию systemd, настроенную для запуска только этих двух серверов (и сделать этот systemd вашим модулем «один сервис для двух команд»), но это кажется излишним.

person Leo K    schedule 27.06.2018