如果进程正常退出,如何编写bash脚本来重新启动它?

如果进程正常退出,如何编写bash脚本来重新启动它?,bash,Bash,所以我读了这篇文章,很快发现这不是我面临的困境 我将下面的代码复制到/etc/init/中,它似乎正在工作 description "Forever my process" start on started mountall stop on shutdown respawn respawn limit 5 5 script export HOME="/root" exec my_process >> /var/log/my-process.log 2>&

所以我读了这篇文章,很快发现这不是我面临的困境

我将下面的代码复制到
/etc/init/
中,它似乎正在工作

description "Forever my process"

start on started mountall
stop on shutdown

respawn
respawn limit 5 5

script
    export HOME="/root"

    exec my_process >> /var/log/my-process.log 2>&1
end script
一个简单的方法:

while sleep 1; do 
    echo "success"
done
对我来说似乎很好

用启动进程的命令替换
sleep 1



编辑:这是标题中问题的答案,我不确定
/etc/init
或者你给出的代码与问题有什么关系

鉴于这是可行的,我将此作为答案发布。如果有更好的方法,请添加

description "Forever my process"

start on started mountall
stop on shutdown

respawn
# respawn limit 5 5 - use this if you want to limit it for any reason

script
    export HOME="/root"

    exec my_process >> /var/log/my-process.log 2>&1
end script

那么问题出在哪里呢?最好的答案是“不要”——任何现代操作系统都内置了一个进程监控系统,不需要在bash中运行自己的东西。(在MacOS上,这是launchd;在Fedora和其他非常新的Linuxen上,它是supervisord;在Ubuntu上,它是upstart……而且有非常强大的竞争对手,你可以为任何UNIX构建/安装,比如djb的daemontools和其BSD许可的克隆runit)。@charlesduff这似乎是发布的内容。这是一个暴发户脚本,所以它将是system managedIt,它几乎不是一个bash脚本来重新启动,是吗?此外,正如您所看到的,这正是将要发生的事情。
respawn
关键字正是针对您想要的行为,但这也是您的问题。。。我不明白问题是什么?为什么有
restart limit
指令,除非你真的想限制重启率(在这种情况下,如果在5秒钟的窗口内出现5次故障,就不再重启)?很有趣。不过它确实会休眠,我想避免这种情况不,我使用
sleep 1
作为测试命令(只是因为我想要一些不会立即退出的命令)。在一个实际的脚本中,您将用您想要运行的实际命令替换它。