Какой идиоматический способ? Я бы предпочел самый стандартный и простой способ с меньшим количеством дополнительных зависимостей. Что-то вроде альтернативы systemd Linux.
Установленные процессы можно перезапустить автоматически, добавив в /etc/rc.conf
yourprocess_enable="YES"
Запуск системы FreeBSD для пользователей Linux
но это при условии, что в /usr/local/etc/rc.d/
Как уже упоминалось, <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