Назад | Перейти на главную страницу

Как перезапустить исполняемый файл, если он умирает

Я ищу способ контролировать процесс и перезапускать исполняемый файл, если процесс умирает по какой-либо причине. Есть ли в Linux встроенный инструмент, который может это сделать?

Я уже отвечал на аналогичный вопрос раньше.

В твоем случае:

#!/bin/bash
while ! <<command>>
do
  sleep 1
  echo "Restarting program..."
done

Заменить <<command>> с командой, которую вы хотите выполнить. Процесс должен завершиться с нулевым кодом выхода, чтобы разорвать цикл. В противном случае он перезапускается скриптом.

Если он запущен из init, вы можете его возродить с помощью init. Установите действие для процесса на «возрождение» для уровней запуска, на которых вы хотите, чтобы процесс.

Вы хотите перезапустить его, только если он умрет? Проблема в том, что он не справляется с ситуациями, когда он зависает. Так что простая проверка процесса не всегда помогает. Итак, если это что-то вроде веб-сервера, вам нужно, чтобы сценарий проверял его с точки зрения пользователя.

Если вы настроили Nagios Monitoring, вы можете использовать обработчики событий. Это просто сценарии, которые вы пишете, которые будут запускаться при отключении службы, поэтому у вас может быть тот, который перезапускает что-то вроде Apache, если веб-сайт не работает.

В зависимости от дистрибутива, но мы успешно использовали «monit» для этой задачи. Это довольно просто. Вы можете выписывать собственные чеки, отслеживать PID процесса и т. Д.

Пример файла monitrc:

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/ssh start"
   stop program  "/etc/init.d/ssh stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout

Почему не простой сценарий на bash?

#!/usr/bin/bash
while `true`
do
  xeyes
done

Замените xeyes программой по вашему выбору.

Короткий ответ: Нет, это надо делать самому.

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

Вы можете использовать что-то вроде daemontools управлять этим.