我有一个名为“路由器”的服务,它可以接收 http 请求。
我决定编写 sh 脚本,定期检查路由器服务的运行状况。
如果出现问题,它将重新启动它。
问题是:
如果路由器是使用此脚本启动的,那么如果终止此脚本,则路由器服务也会终止。
奇怪的是,简单的一行 sh 脚本只执行“服务路由器重新启动” - 工作正常(因此它重新启动服务并立即关闭,一切都很好)
我认为原因在于循环中的某个地方或者某些 bash if 事情。
附加脚本代码...
谢谢帮助!
#!/bin/bash
while :
do
STATUS=$(curl --silent localhost:80/test)
if [ "$STATUS" != "OK" ]
then
echo "problems: $STATUS".
service router restart
fi
sleep 5
done
答案1
以下是bash脚本执行的过程:
- Bash 分叉了一个子进程,并运行另一个 bash。
- 这个子 bash 解释脚本,分叉子并根据需要执行程序。
您在脚本中运行的所有程序都以这个子 bash 作为控制终端。
因此,现在如果子 bash 终止,所有程序都会正常终止。
由于子 bash 直到脚本退出后才会返回,因此您无法在父 bash 上工作。
因此您可能需要在后台运行子 bash(即脚本)。这样
您就可以继续工作。后台 bash 不会终止(除非您说或出现某些错误)。