我想要一种在 shell 脚本中编写守护进程的方法,该守护进程循环运行另一个应用程序,如果它死了则重新启动它。
- 运行时使用
./myscript.sh
从 SSH 会话中,它将启动守护程序的新实例,除非守护程序已在运行。
- 当 SSH 会话结束时,守护进程将持续存在。
- 应有一个参数(
./myscript -stop
)杀死任何现有的守护进程。
(编辑注意事项- 原来的问题指出nohup
且不得使用类似工具。这个人为的要求是一个“XY问题”,接受的答案实际上使用了OP声称不可能使用的所有工具。)
根据评论中的澄清,您真正想要的是一个守护进程,该进程使子进程保持运行,并在其退出时重新启动它。您需要一种在 ssh 会话中键入“./myscript.sh”并启动守护进程的方法。
#!/usr/bin/env bash
PIDFILE=~/.mydaemon.pid
if [ x"$1" = x-daemon ]; then
if test -f "$PIDFILE"; then exit; fi
echo $$ > "$PIDFILE"
trap "rm '$PIDFILE'" EXIT SIGTERM
while true; do
#launch your app here
/usr/bin/server-or-whatever &
wait # needed for trap to work
done
elif [ x"$1" = x-stop ]; then
kill `cat "$PIDFILE"`
else
nohup "$0" -daemon
fi
运行脚本:它将使用 nohup 为您启动守护进程。守护进程是一个循环,监视子进程退出,并在退出时重新启动它。
为了控制守护进程,有一个-stop
脚本可以采用的参数将杀死守护进程。查看系统初始化脚本中的示例,以获得更完整的示例以及更好的错误检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)