![如何在 FreeBsd 11 中崩溃或重启后自动重新启动进程?](https://linux22.com/image/718380/%E5%A6%82%E4%BD%95%E5%9C%A8%20FreeBsd%2011%20%E4%B8%AD%E5%B4%A9%E6%BA%83%E6%88%96%E9%87%8D%E5%90%AF%E5%90%8E%E8%87%AA%E5%8A%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
惯用的方式是什么?我更喜欢最标准、最简单的方式,并且附加依赖项更少。类似于 Linux 的 systemd 的替代品。
答案1
可以通过添加以下选项来自动重启已安装的进程/etc/rc.conf
yourprocess_enable="YES"
但这是假设有一个启动脚本/usr/local/etc/rc.d/
答案2
如果你的进程还没有 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
答案3
<service>_enable=YES
如上所述,/etc/rc.conf
(或相关rc.conf.d
文件)将在启动时启动一项服务。
对于崩溃时重新启动,规范的做法是守护进程工具。
答案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