Hon*_*nza 42 linux bash process daemon
我有一个由 init.d 脚本在后台执行的进程。例如:
case "$1" in
start)
/bin/myprocess &
stop)
killall myprocess
restart)
killall myprocess
/bin/myprocess &
esac
Run Code Online (Sandbox Code Playgroud)
在某些情况下,myprocess 可能会失败并返回。是否有任何(标准)方法来检测其故障并自动重新启动?
Jde*_*eBP 32
Buildroot 有三种可能的初始化系统,因此有三种方法可以做到这一点:
init有了这个,一个条目添加到/etc/inittab.
::respawn:/bin/myprocess
Run Code Online (Sandbox Code Playgroud)
请注意,BusyBoxinit具有特殊的/etc/inittab格式。第二个字段没有意义,第一个字段不是ID而是设备basename。
init再一次,向 中添加一个条目/etc/inittab。
myprocess:2345:respawn:/bin/myprocess
Run Code Online (Sandbox Code Playgroud)
systemd一个人写一个单元文件,比如/etc/systemd/system/myprocess.service:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
启用它以在启动时自动启动:
systemctl enable myprocess.service
Run Code Online (Sandbox Code Playgroud)
手动启动它:
systemctl start myprocess.service
Run Code Online (Sandbox Code Playgroud)
Try*_*lks 27
创建一个带有循环调用相同进程的子shell怎么样?
如果它结束,则循环的下一次迭代继续并再次开始。
(while true; do
/bin/myprocess
done) &
Run Code Online (Sandbox Code Playgroud)
如果子外壳死了,它就结束了。在这种情况下,唯一的可能性是创建另一个进程(我将其称为死灵法师)来检查您的进程是否处于活动状态,如果不是则启动它并使用 cron 运行此死灵法师,以便您可以定期检查。
下一步会想知道如果 cron 死了会发生什么,但在某个时候你应该感到安全并停止担心。
Ala*_*tko 17
最简单的方法是将它添加到/etc/inittab,它旨在做这样的事情:
respawn 如果该进程不存在,则启动该进程。不要等待其终止(继续扫描 /etc/inittab 文件)。当它死亡时重新启动该过程。如果该进程存在,则什么都不做并继续扫描 /etc/inittab 文件。
例如,你可以这样做:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100822 次 |
| 最近记录: |