Как автоматически перезапустить процесс после сбоя или перезагрузки в FreeBsd 11?

Как автоматически перезапустить процесс после сбоя или перезагрузки в FreeBsd 11?

Какой идиоматический способ? Я бы предпочел наиболее стандартный и в то же время простой способ с меньшим количеством дополнительных зависимостей. Что-то вроде альтернативы systemd Linux.

решение1

Установленные процессы можно перезапустить автоматически, добавив в/etc/rc.conf

yourprocess_enable="YES"

Запуск системы FreeBSD для пользователей Linux

но это при условии, что в нем есть стартовый скрипт/usr/local/etc/rc.d/

Справочник FreeBSD — Запуск служб

решение2

Если у вас еще нет скрипта rc.d для вашего процесса, вы можете довольно легко достичь желаемого результата с помощьюдемон(8)команда. Команда запустит дочерний процесс в фоновом режиме, а с помощью параметра командной строки -rвы можете заставить ее перезапустить дочерний процесс, если он завершится:

$ daemon -r /some/path/to/command

В более поздних версиях FreeBSD можно указать -R <delay in seconds>время ожидания перед перезапуском процесса.

Для запуска процесса после перезагрузки укажите команду вкронтаб(5)файл вроде этого:

@reboot daemon -r /some/path/to/command

Чтобы отредактировать файл crontab, используйте

$ crontab -e

решение3

Как уже упоминалось, <service>_enable=YESin /etc/rc.conf(или соответствующие rc.conf.dфайлы) запустит службу при загрузке.

Для перезапуска при сбоях канонический способ сделать это включал быDAEMON Tools.

решение4

Вы можете добавлять скрипт в cron каждые (например) две минуты:

#!/bin/sh

process = 'my-secret-service' # process name

if ps ax | grep -v grep | grep $process
then
    echo "$process is alive."
else
    echo "$process is dead, but will be launched."
/usr/local/bin/my-secret-service #launch command

fi

Связанный контент