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

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

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

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

yourprocess_enable="YES"

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

но это при условии, что в /usr/local/etc/rc.d/

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

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

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

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

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

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

Чтобы запустить процесс после перезагрузки, укажите команду в поле crontab (5) файл вроде этого:

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

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

$ crontab -e

Вы можете добавлять скрипт в 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