web-dev-qa-db-ja.com

httpdへのSIGHUPシグナルがTomcatプロセスを強制終了するのはなぜですか?

ポート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も強制終了していることがわかりました。

3
Geo

TomcatはApacheによって生成されたと思います。

問題は、Apacheがログファイルを閉じるときに、Tomcatがそのログファイルにアクセスしようとしているときに、突然魔法のように消えてしまったことに気付いたときに、かがんで死んでしまうことです。

もう1つの説明は、Apacheサーバーがログのローテーションと構成ファイル(SIGHUPが開始する)のリロード中にTomcatをリセットしていること、および何らかのバグなどにより、Tomcatがその時点で再起動できないことです。

1
towo

上で述べたように、これは、Apache内で実行されているPHPスクリプトからTomcatを起動している場合に発生する可能性があります。これに遭遇し、これを取得できた他の人のために、ここで次のことに注意してください。はるか:-)。

Tomcatをsetsidで起動します。これにより、Tomcatが独自のプロセスグループに配置され、Apacheに送信するシグナル(SIGHUPを含む)から完全に分離されます。次のようなものを試してください:

/ usr/bin/setsid $ CATALINA_HOME/bin/startup.sh

0
Steve Kehlet