Подтвердить что ты не робот

UpStart initctl start | restart ubuntu

При использовании upstart на ubuntu, как я могу выполнить команду для запуска задания, если не запускать и перезапускать, если он уже запущен. При развертывании приложения в новом node задание не определено.

initctl restart JOB complains if not already running
initctl start JOB complains if already running.

Я могу script сделать это

initctl start JOB
initctl restart JOB

Но, похоже, это не самая приятная вещь.

4b9b3361

Ответ 1

Я был перед той же проблемой. За исключением прямой команды "lazy-stop-then-start", встроенной initctl, мы должны script.

Вызывает запуск и перезапуск, если он не работает:

initctl start JOB || initctl restart JOB

Этот script, вероятно, не тот ответ, который мы оба искали, но он достаточно короткий, чтобы упомянуть его.

Пока услуга работает красиво, она будет делать трюк.

Когда службы терпят неудачу, этот script терпит неудачу дважды; Например, если служба была остановлена ​​и на самом деле не запускается, она также не будет перезагружена.

Определенно ищет улучшения для этого.

Надеюсь, это поможет.

Ответ 2

Я также попробовал метод "начать или перезапустить", который предложил hmalphettes, но попал в неприятности. При использовании этого подхода обновления к выскочке script не будут применены. Вместо этого я использую это, которое работает так, как я ожидал:

sudo stop JOB || true && sudo start JOB

В основном это означает "Остановить задание, если оно работает, а затем запустить его".

Ответ 3

sudo service JOB restart

В Ubuntu была добавлена ​​служебная команда, чтобы заставить ее работать на Upstart так же, как в наиболее распространенных случаях на sysvinit.

systemctl restart JOB

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