从 sh 脚本启动的服务在 sh 脚本停止时

从 sh 脚本启动的服务在 sh 脚本停止时

我有一个名为“路由器”的服务,它可以接收 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脚本执行的过程:

  1. Bash 分叉了一个子进程,并运行另一个 bash。
  2. 这个子 bash 解释脚本,分叉子并根据需要执行程序。

您在脚本中运行的所有程序都以这个子 bash 作为控制终端。
因此,现在如果子 bash 终止,所有程序都会正常终止。

由于子 bash 直到脚本退出后才会返回,因此您无法在父 bash 上工作。
因此您可能需要在后台运行子 bash(即脚本)。这样
您就可以继续工作。后台 bash 不会终止(除非您说或出现某些错误)。

相关内容