Как контролировать и автоматически перезапускать процесс?

Я хочу иметь процесс, который будет перезапущен в случае сбоя. Я немного погуглил и обнаружил, что простым решением является использование daemontools .

Я не понял, как это настроить.

  1. Как проще всего реализовать такую ​​функциональность?
  2. Как ее настроить?
34
задан 5 February 2013 в 16:06

6 ответов

Этот ответ относится к версиям Ubuntu с остроумием h Выскочка (<= 14.10). Используйте другой подход для версий с Systemd (> = 15.04).

Похоже, вы ищете функциональность, уже предоставленную в Ubuntu с Upstart . Раздел respawn в конфигурации сделает именно то, что вам нужно. Я бы не рекомендовал использовать менее стандартный способ решения этой проблемы.

Без более подробной информации о процессе, которым вы пытаетесь управлять, трудно сказать, как должна выглядеть конфигурация. Это зависит, например, от того, разветвляется ли он и помещается в фоновый режим. Документация Upstart по разделу respawn должна предоставить вам дополнительную информацию.

К сожалению, пока невозможно правильно запускать пользовательские задания: не может запустить выскочку для выполнения пользовательского задания

Пример

Предположим, мы хотим, чтобы приложение «Калькулятор» работало, даже если оно было уничтожено огнем (сигнал 9).

  1. Создайте файл конфигурации в /etc/init/calculator.conf (на основе этой статьи ):

     #! Upstart
    описание "Калькулятор"
    
     # Запустить задание через скрипт управления демоном.  Замени "gert" своим именем пользователя.
    exec su -l gert -c 'export DISPLAY =: 0;  / usr / bin / gnome-Calculator '
    
     # Перезапускаем процесс, если он умирает с сигналом
     # или код выхода, не указанный в строфе «нормальный выход».
    респаун
    
     # Отказаться, если перезагрузка происходит 10 раз за 90 секунд.
    лимит возрождения 10 90
     
  2. Запустите его, запустив

     sudo start Calculator.
     
  3. Он открывается на вашем текущем экране (: 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.

29
ответ дан 5 February 2013 в 16:06

Чрезвычайно простой инструмент, который может достичь того же эффекта без необходимости настройки, - это бессмертный : https://immortal.run/

Просто выполните команду вот так:

immortal

Он будет работать в фоновом режиме и автоматически перезапуститься, если завершится.

  • immortalctl : просмотр статуса выполняемых заданий. Здесь будет напечатан столбец name , вы можете использовать его для ссылки на задание с другими управляющими командами.
  • immortalctl stop : останавливает мониторинг задания с заданным имя (он не будет перезапущен автоматически, но текущий процесс продолжит выполнение)
  • immortalctl -k <имя> : отправляет сигнал SIGKILL текущему процессу.
  • immortalctl exit <имя> : Останавливает мониторинг задания с заданным именем и удаляет его из списка заданий.
13
ответ дан 5 February 2013 в 16:06

Есть способ без "Выскочки". Ключевое слово - "inittab" :-). Хотя этот файл обычно не изменяется по умолчанию, его можно использовать для достижения желаемого возрождения на машинах SYSV.

1
ответ дан 5 February 2013 в 16:06

Процессы запуска и возрождения управляются "systemd", начиная с Ubuntu 15.04, хорошее введение может можно найти здесь

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 и выскочке.

1
ответ дан 5 February 2013 в 16:06

ps-watcher - это инструмент, который отслеживает, какие процессы выполняются, и выполняет действие при определенных обстоятельствах. Давайте установим его:

apt-get install ps-watcher

См. Нижнюю часть Запуск HHVM с откатом на PHP-FPM для получения подробной информации - это хорошо сработало для меня.

0
ответ дан 5 February 2013 в 16:06

Если вам не нужны функции демона / службы / фонового процесса и вы просто хотите сделать это в консоли, создайте файл с именем autorestart.sh :

#!/bin/bash

while [ 1 ]; do
  some_command
done

Тогда ./ autorestart.sh автоматически перезапустит some_command , если он завершится или выйдет из строя. CTRL-C прерывает цикл и полностью закрывает программу.

Проверено на Ubuntu 18.04.

1
ответ дан 23 November 2019 в 00:29

Другие вопросы по тегам:

Похожие вопросы: