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

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

3 ответа

Если у вас еще нет сценария rc.d для вашего процесса, вы можете довольно легко добиться желаемого результата с помощью команды daemon(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

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

yourprocess_enable="YES"

FreeBSD System Startup for Linux Users

but that's assuming there is a start up script in /usr/local/etc/rc.d/

The FreeBSD Handbook - Starting Services

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

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

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