Я ищу способ контролировать процесс и перезапускать исполняемый файл, если процесс умирает по какой-либо причине. Есть ли в 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
управлять этим.