UpStart initctl start | перезапустить Ubuntu - PullRequest
14 голосов
/ 28 февраля 2012

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

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

Я могу написать сценарий, чтобы сделать

initctl start JOB
initctl restart JOB

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

Ответы [ 3 ]

10 голосов
/ 16 марта 2012

Я был перед той же проблемой. Если не считать прямой команды «lazy-stop-then-start», встроенной в initctl, мы должны написать скрипт.

Вызывать запуск и перезапуск, если это не удается:

initctl start JOB || initctl restart JOB

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

Пока служба работает хорошо, она будет работать.

При сбое служб этот скрипт завершается ошибкой дважды; Например, если служба была остановлена ​​и фактически не запускается, она также не будет перезапущена.

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

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

7 голосов
/ 02 мая 2014

Я также попробовал метод 'start or restart', предложенный hmalphettes, но у меня возникли проблемы.При использовании этого подхода обновления к сценарию upstart не будут применяться.Вместо этого я использую это, которое работает так, как я и ожидал:

sudo stop JOB || true && sudo start JOB

Это в основном гласит: «Остановите задание, если оно выполняется, затем запустите его».

2 голосов
/ 06 мая 2014
sudo service JOB restart

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

systemctl restart JOB

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

...