初始化脚本:我需要 PID 文件吗?

初始化脚本:我需要 PID 文件吗?

我是初始化脚本世界的新手,而且仍然是 BASH 新手。我目前的情况需要一些指导。

我们运行一个利用 JBOSS 的应用程序,我需要能够使用 init 脚本像守护进程一样处理它。这是我第一次编写初始化脚本,我知道“.pid”文件通常用于使用初始化脚本来跟踪进程,但是我想知道在我的情况下是否真的需要它们。

例如,当我使用 init 脚本的“stop”功能时,我可以让它检查 .pid 文件以获取进程 ID,或者我可以简单地使用“checkproc”让它获取 PID。

这是我写的一个例子。

JBOSSPID=$(checkproc -v $JBOSS_PROCESS_NAME)

function _stop {
   # Check if JBOSS is running..
   if [ -z "$JBOSSPID" ]; then
      echo "Service is not running.."
      exit
   fi

   # Attempt to shutdown JBOSS gracefully..
   echo "Stopping service.."
   ./stop_jboss.sh

   # Loop until JBOSS PID no longer exists..
   RUNNING=0
   while [ "$RUNNING" == "0" ]
   do
      JBOSSPID=$(checkproc -v $JBOSS_PROCESS_NAME)
      if [ "$JBOSSPID" == "" ]; then
         RUNNING=1
      fi
   done
}

我也编写了“start”和“status”函数来获取PID。我测试了它,它似乎工作正常,但我不知道是否缺少一些东西,如果没有 .pid 文件,可能会出错。我有什么理由放弃这个逻辑并转而使用 .pid 文件吗?

答案1

您可以在没有 pid 文件的情况下制作 init 脚本,不会有任何问题。除非另一个用户手动启动jboss实例。我认为您的初始化脚本无法处理“checkproc -v $JBOSS_PROCESS_NAME”返回的多行

当可能在同一台计算机上启动多个应用程序时,pid 文件主要有用。您不希望您的初始化脚本停止其他用户启动的实例。

因此,您可以保存从 init 脚本启动的程序的 pid 文件,而不是杀死第一个(或所有)具有特定字符串的程序。这样,当您尝试杀死该程序时,您只会杀死您启动的程序。

相关内容