2016-11-25 9 views
0

У меня есть служба systemd для моего приложения загрузки весны, подключенного к серверу consul, за haproxy. consul предоставляет consul-template для автоматического обновления местоположения службы в файле конфигурации haproxy с помощью команды consul-template.Сделать команду ExecStartPost для запуска в фоновом режиме

consul-template принимает файл шаблона и записывается в окончательный файл конфигурации haproxy, а затем перезагружает haproxy.

Теперь процесс consul-template должен выполняться в фоновом режиме всегда вместе с моим приложением, так что по мере появления приложения он может обнаруживать запуск нового приложения и обновлять его местоположение в файле конфигурации.

Вот мой служебный файл systemd.

[Unit] 
Description=myservice 
Requires=network-online.target 
After=network-online.target 

[Service] 
Type=forking 
PIDFile=/home/dragon/myservice/run/myservice.pid 
ExecStart=/home/dragon/myservice/bin/myservice-script start 
ExecReload=/home/dragon/myservice/bin/myservice-script reload 
ExecStop=/home/dragon/myservice/bin/myservice-script stop 
ExecStartPost=consul-template -template '/etc/haproxy/haproxy.cfg.template:/etc/haproxy/haproxy.cfg:sudo systemctl reload haproxy' 
User=dragon 

[Install] 
WantedBy=multi-user.target 

Теперь, когда я начинаю systemctl start myservice, мой запуск приложения и вызов consul-template также работает, но consul-template процесс не идет в фоновом режиме. Я должен нажать Ctl+C, а затем возвращается systemctl, и у меня есть как мое приложение, так и процесс консул-шаблона.

Есть ли способ запустить consul-template процесс в фоновом режиме, указанный в ExecStartPost?

Я пытался добавить & в конце команды ExecStartPost, но затем consul-template жалуется, что это дополнительный недопустимый аргумент, и он выходит из строя.

Я также пытался сделать команду /bin/sh -c "consul-template command here...", но тогда это также не работает. Даже nohup в этой команде не работал.

Любая помощь действительно оценена.

+0

Вы можете иметь больше успеха с отделением 'процесса консула template' в свой systemd. – Amir

ответ

1

Обходной будет иметь Баш файл как ваш EntryPoint, добавить все, что нужно там, то все это будет волшебно работать

+0

В результате я создал отдельный сервис для консул-шаблона и создал файл шаблона самообучения с использованием пары ключ-значение консула. – divinedragon

+0

Консул потрясающий! :) Оцените, если вы думаете, что я на самом деле помог каким-то образом :) –

+0

Я отправлю свое в качестве ответа. Это будет полезно для многих людей. – divinedragon