私が理解しているのは、一般にデーモン用のPIDファイルを生成するのが良いアイデアだということです。これはstartproc
そのデーモンを起動する良い方法です。
PIDファイルを参照するには、-iおよび-pパラメーターが必要であることを認識していますが、startproc
PIDファイルを作成または開始したデーモンのIDで更新しません。 echoを使用する$!
と、正しいプロセス識別子も提供されません。startproc
startproc
デーモンのPIDを取得する方法について提案がある人はいますか?
とにかく、私はrcスクリプトを作成していて、権限のないユーザーでJVMを起動したいと思います。私はこのユーザーにログインシェル(オプションではありません)を提供したくなく、su -c "java ..." user
デーモンの実行中にルートプロセスを停止したくありません(これは除外されますsudo -Eu user java ...
)。したがって、これはすべての可能な解決策であることを認めていますが、それらのどれも理想的ではないと思います。しかし、これらの選択肢について私の仮定が間違っている場合は、いつでも修正してください。
答え1
これを行う方法を知っている人は誰もいないようです。
java
代わりに、私はTomcatがデフォルトで行うことをしました。シェルスクリプトを作成して直接呼び出すのではなく、私のサービスから呼び出しました。
echo $!
このシェルスクリプトは、JVMの起動後にPIDファイルを生成する役割も担当します。シャットダウンの場合、このPIDファイルを確認し、正常終了後に削除するための同様のスクリプトを作成しました。どちらのスクリプトもsudo -Eu $USER script_name.sh
サービスから呼び出されます。
startproc
技術的には、これは解決策がそれを全く使用していないため、私の質問には答えませんが、うまくいき、実行中のプロセスのコマンドラインを比較するのは面倒な作業を防ぎます。
答え2
同じ問題が発生し、いくつかの方法を試しました。
PID=$(startproc -p $PID_FILE <some parameters>)
echo $PID > $PID_FILE
うまくいきました... SLES 11 SP4で試しました。
しかし、SLES 12では、すべてが完全に異なります:(