Как автоматически перезапустить процесс после сбоя или перезагрузки во 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/
Как уже упоминалось, <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