Я хочу иметь процесс, который будет перезапущен в случае сбоя. Я немного погуглил и обнаружил, что простым решением является использование daemontools .
Я не понял, как это настроить.
Похоже, вы ищете функциональность, уже предоставленную в Ubuntu с Upstart . Раздел respawn
в конфигурации сделает именно то, что вам нужно. Я бы не рекомендовал использовать менее стандартный способ решения этой проблемы.
Без более подробной информации о процессе, которым вы пытаетесь управлять, трудно сказать, как должна выглядеть конфигурация. Это зависит, например, от того, разветвляется ли он и помещается в фоновый режим. Документация Upstart по разделу respawn
должна предоставить вам дополнительную информацию.
К сожалению, пока невозможно правильно запускать пользовательские задания: не может запустить выскочку для выполнения пользовательского задания
Предположим, мы хотим, чтобы приложение «Калькулятор» работало, даже если оно было уничтожено огнем (сигнал 9).
Создайте файл конфигурации в /etc/init/calculator.conf
(на основе этой статьи ):
#! Upstart
описание "Калькулятор"
# Запустить задание через скрипт управления демоном. Замени "gert" своим именем пользователя.
exec su -l gert -c 'export DISPLAY =: 0; / usr / bin / gnome-Calculator '
# Перезапускаем процесс, если он умирает с сигналом
# или код выхода, не указанный в строфе «нормальный выход».
респаун
# Отказаться, если перезагрузка происходит 10 раз за 90 секунд.
лимит возрождения 10 90
Запустите его, запустив
sudo start Calculator.
Он открывается на вашем текущем экране (: 0
) и наслаждайтесь великолепием, наблюдая его перезапуск после его закрытия.
Определите идентификатор процесса, например путем выполнения ps aux | Калькулятор grep
:
gert 13695 0,2 0,4 349744 16460? Сл 13:38 0:00 / usr / bin / gnome-Calculator
Убейте его огнем.
sudo kill -9 13695
Посмотрите, как он появится снова:
gert 16059 4.6 0.4 349736 16448? Сл 13:40 0:00 / usr / bin / gnome-Calculator
Обратите внимание, что это будет более элегантно с планами для планов Ubuntu 13.04 с надлежащей поддержкой User Job.
Чрезвычайно простой инструмент, который может достичь того же эффекта без необходимости настройки, - это бессмертный
: https://immortal.run/
Просто выполните команду вот так:
immortal
Он будет работать в фоновом режиме и автоматически перезапуститься, если завершится.
immortalctl
: просмотр статуса выполняемых заданий. Здесь будет напечатан столбец name
, вы можете использовать его для ссылки на задание с другими управляющими командами. immortalctl stop
: останавливает мониторинг задания с заданным имя (он не будет перезапущен автоматически, но текущий процесс продолжит выполнение) immortalctl -k <имя>
: отправляет сигнал SIGKILL текущему процессу. immortalctl exit <имя>
: Останавливает мониторинг задания с заданным именем и удаляет его из списка заданий. Есть способ без "Выскочки". Ключевое слово - "inittab" :-). Хотя этот файл обычно не изменяется по умолчанию, его можно использовать для достижения желаемого возрождения на машинах SYSV.
Процессы запуска и возрождения управляются "systemd", начиная с Ubuntu 15.04, хорошее введение может можно найти здесь
. Пример, который поможет вам начать работу, доступен на
https://www.devdungeon.com/content/creating-systemd-service-files
Этот подход заменяет старые, основанные на / etc / inittab и выскочке.
ps-watcher - это инструмент, который отслеживает, какие процессы выполняются, и выполняет действие при определенных обстоятельствах. Давайте установим его:
apt-get install ps-watcher
См. Нижнюю часть Запуск HHVM с откатом на PHP-FPM для получения подробной информации - это хорошо сработало для меня.
Если вам не нужны функции демона / службы / фонового процесса и вы просто хотите сделать это в консоли, создайте файл с именем autorestart.sh
:
#!/bin/bash
while [ 1 ]; do
some_command
done
Тогда ./ autorestart.sh
автоматически перезапустит some_command
, если он завершится или выйдет из строя. CTRL-C прерывает цикл и полностью закрывает программу.
Проверено на Ubuntu 18.04.