daemon
コマンド(RHEL 6.2)を使用してデーモン化されたJavaプロセスがあります。次の行を使用してプロセスを開始し、以下の行を使用してプロセスを停止しています。
daemon --command "/opt/my-service" --respawn --name=my-service --verbose
daemon --stop --name=my-service --verbose
停止/開始アプローチを使用してプロセスを再開しようとするまで、物事は機能します。
daemon --stop --name=my-service --verbose
daemon --command "/opt/my-service" --respawn --name=my-service --verbose
上記のコマンドが実行される前にプロセスが実行されている場合、既存のプロセスは停止されますが、新しいプロセスは作成されません。代わりに、次の行が:に記録されます/var/log/messages
。
Oct 27 07:59:46 myhostname my-service: my-service: fatal: failed to become a daemon: Resource temporarily unavailable
これは、私が理解している限り、pidファイルのロックを取得しようとしたが、別のプロセスがそのロックを保持していたことを意味します。つまり、元のプロセスはまだ実行されていました。
興味深いことに、次のコマンドでは再現できません。
daemon --command "sleep 30s" --respawn --name=sleeper --verbose
daemon --stop --name=sleeper --verbose
daemon --command "sleep 30s" --respawn --name=sleeper --verbose
次に、の非同期性を引き起こす/悪用する何かが私のプロセスにあるに違いありません--stop
。
どうすれば--stop
ブロッキングできますか?