ポート80にバインドされているTomcatプロセスとポート5000にバインドされているhttpdプロセスを備えたサーバーがあります。何らかの理由で、プロセスがhttpdプロセスにSIGHUPシグナルを送信するたびに、Tomcatプロセスがエラーなどなしで消えます。
次の方法でサーバーの問題を修正し、httpd.confに明示的なServerNameディレクティブを追加して、問題を修正しました。
HttpdへのSIGHUPがTomcatプロセスを強制終了した理由はまだわかりません。
注1:次のコマンドでkillシグナルを複製しました:
httpdpidが何であるかを調べます。
cat /etc/httpd/run/httpd.pid
4056
その後、ため息信号で殺します
kill -s SIGHUP 4056
注2:問題のトラブルシューティングを行ったところ、毎朝午前4時に実行されているlogrotateがSIGHUPシグナルを送信してログをローテーションできるようにし、Tomcatも強制終了していることがわかりました。
TomcatはApacheによって生成されたと思います。
問題は、Apacheがログファイルを閉じるときに、Tomcatがそのログファイルにアクセスしようとしているときに、突然魔法のように消えてしまったことに気付いたときに、かがんで死んでしまうことです。
もう1つの説明は、Apacheサーバーがログのローテーションと構成ファイル(SIGHUPが開始する)のリロード中にTomcatをリセットしていること、および何らかのバグなどにより、Tomcatがその時点で再起動できないことです。
上で述べたように、これは、Apache内で実行されているPHPスクリプトからTomcatを起動している場合に発生する可能性があります。これに遭遇し、これを取得できた他の人のために、ここで次のことに注意してください。はるか:-)。
Tomcatをsetsidで起動します。これにより、Tomcatが独自のプロセスグループに配置され、Apacheに送信するシグナル(SIGHUPを含む)から完全に分離されます。次のようなものを試してください:
/ usr/bin/setsid $ CATALINA_HOME/bin/startup.sh