xvfb-run で開始された Java プロセスの PID を取得しようとしています。xvfb-run なしで起動するときは、$! を使用します。最後のバックグラウンド プロセスの PID を取得するには、xvfb-run を使用するとすぐに xvfb-run の PID を取得します。
コードは次のとおりです。
#! /bin/bash
logfile=/var/log/SleepTest.log
pidfile=/var/run/SleepTest.pid
command="java -jar /data/test/SleepTest.jar"
( eval exec -c xvfb-run $command < /dev/null >> $logfile 2>&1 ) &
$! > $pidfile
最後から 2 行目の xvfb-run 部分を削除すると、すべて正常に動作します (表示されない部分とプログラムがクラッシュする部分を除く)。おそらく「()」と「&」をいじる必要がありますが、私は専門家ではありません。
プログラム SleepTest.jar は私が書いた小さなプログラムなので、本物を扱う必要はありません。2分間しか寝ない。
なぜ xvfb-run を使用するのか疑問に思っている方のために説明すると、それは、起動する必要がある Java アプリケーションが SWT を使用しており、サーバーにディスプレイがないためです。
なぜプロセスの pid が必要なのか疑問に思っている方のために説明すると、それは、アプリケーションを開始|停止|ステータスできるように init.d ファイルを作成したいからです。
それを取得する簡単な方法はありますか?