Ответы:
Если он запускается из init, вы можете запустить его из init. Установите действие для процесса «респаун» для уровней запуска, на которых вы хотите процесс.
Я уже отвечал на аналогичный вопрос раньше .
В твоем случае:
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Замените <<command>>
на команду, которую вы хотите выполнить. Процесс должен завершиться с нулевым кодом завершения, чтобы разорвать цикл. В противном случае он перезапускается сценарием.
Вы хотите перезапустить его, только если он умрет? Проблема в том, что он не обрабатывает ситуации, когда он зависает. Так что просто проверить процесс не всегда поможет. Так что если это что-то вроде веб-сервера, вам нужен скрипт, проверяющий его с точки зрения пользователя.
Если вы настроили 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
Краткий ответ : Нет, ты должен сделать это сам.
Длинный ответ : Вам понадобится родительский процесс, чтобы запустить его, а затем продолжать проверять, что он жив, и перезапускать его при необходимости.
Вы можете использовать что-то вроде daemontools
управления этим.