初期化スクリプト:PIDファイルが必要ですか?

初期化スクリプト:PIDファイルが必要ですか?

私はinitスクリプトの世界に初めて触れ、まだBASHに初めて触れました。現在の状況に関する指示が必要です。

私たちはJBOSSを活用するアプリケーションを実行しており、initスクリプトを使用してデーモンのようにそれを処理できる必要があります。 initスクリプトを書くのは今回が初めてです。一般的に、「.pid」ファイルはinitスクリプトを使用してプロセスを追跡するために使用されていますが、私の場合はこのファイルが本当に必要かどうか疑問に思います。

たとえば、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
}

また、PIDを取得するために「開始」および「状態」関数を作成しました。テストしてみるとうまく動作しているようですが、.pidファイルがないと間違っている可能性のある部分が欠けているのかわかりません。このロジックを放棄し、代わりに.pidファイルを使用する理由がありますか?

ベストアンサー1

pidファイルなしでinitスクリプトを問題なく作成できます。他のユーザーが手動でjbossインスタンスを起動しない限り。あなたの初期化スクリプトが "checkproc -v $JBOSS_PROCESS_NAME"によって返された複数行を処理できないようです。

pidファイルは、同じコンピュータで複数のアプリケーションを起動するときに主に役立ちます。初期化スクリプトは、他のユーザーが起動したインスタンスを停止したくありません。

したがって、特定の文字列を使用して最初の(またはすべての)プログラムを終了するのではなく、initスクリプトで起動されたプログラムのpidファイルを保存できます。これにより、プログラムを終了しようとしたときに開始したプログラムのみが終了します。

おすすめ記事