Этот ответ относится к версиям Ubuntu с Upstart (<= 14.10). Используйте другой подход для версий с Systemd (> = 15.04).
Кажется, вы ищете функциональность, уже предоставленную в Ubuntu с Upstart . Раздел respawn
в конфигурации будет делать именно то, что вам нужно. Я бы рекомендовал против использования менее стандартного способа борьбы с этим.
Без более подробной информации о процессе, которым вы пытаетесь управлять, трудно сказать, как должна выглядеть конфигурация. Это зависит от того, разветвляется ли он и помещается ли, например, в фоновом режиме. Документация Upstart по respawn
разделу должна дать вам больше информации.
К сожалению, пока невозможно правильно запустить задания пользователя : невозможно запустить программу для запуска задания пользователя
пример
Предположим, мы хотим, чтобы приложение «Калькулятор» работало, даже если оно было убито огнем (сигнал 9).
Создайте файл конфигурации в /etc/init/calculator.conf
(на основе этой статьи ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Запустите это, запустив
sudo start calculator
Он открывается на вашем текущем дисплее ( :0
) и наслаждайтесь удивительностью, видя, как он перезапускается после закрытия.
Определите идентификатор процесса, например, выполнив ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Убей его огнем.
sudo kill -9 13695
Посмотрите, как оно появляется снова:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Обратите внимание, что это будет более элегантно с планами для планов Ubuntu 13.04 с надлежащей поддержкой пользовательских заданий.
servicename.conf
должно соответствовать команде для запускаstart servicename
. Я подозреваю, что вы выбрали другое имя.Очень простой инструмент, который может достичь того же эффекта без необходимости настройки
immortal
: https://immortal.run/Просто выполните команду следующим образом:
immortal <cmd>
Он будет работать в фоновом режиме и автоматически перезапустится, если выйдет.
immortalctl
: Просмотр статуса запущенных заданий. Здесьname
будет напечатан столбец, который можно использовать для ссылки на задание с другими командами управления.immortalctl stop <name>
: Прекращает мониторинг задания с заданным именем (оно не будет автоматически перезапущено, но текущий процесс продолжит выполняться)immortalctl -k <name>
: Отправляет SIGKILL текущему процессу.immortalctl exit <name>
: Останавливает мониторинг задания с указанным именем и удаляет его из списка заданий.источник
stdout
иstderr
на переднем плане?immortalctl -l out.log <cmd> && tail -f out.log
для достижения того же эффекта.Если вам не нужны функции демона / службы / фонового процесса и вы просто хотите сделать это в консоли, то создайте файл с именем
autorestart.sh
:Затем
./autorestart.sh
автоматически перезапустится,some_command
если он выйдет или выйдет из строя. CTRL-C прерывает цикл и полностью закрывает программу.Проверено на Ubuntu 18.04.
источник
Есть путь без "Upstart". Ключевое слово "inittab" :-). Хотя этот файл обычно не изменяется по умолчанию, его можно использовать для достижения желаемого повторного вызова на машинах SYSV.
источник
ps-watcher - это инструмент, который отслеживает, какие процессы запущены, и выполняет действие при определенных обстоятельствах. Давайте установим это:
Подробности смотрите в нижней части раздела Запуск HHVM с отступлением к PHP-FPM - для меня это хорошо работает.
источник
Начиная с Ubuntu 15.04 процессы запуска и перезапуска управляются «systemd», хорошее введение можно найти здесь
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
пример, с которого можно начать, доступен на
https://www.devdungeon.com/content/creating-systemd-service-files
Этот подход заменяет старые, основанные на / etc / inittab и upstart.
источник