TTG
@TTG (TT)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

apacheログのlogrotateについて

解決したいこと

RHEL6.7です
kill -HUP 'cat /var/run/httpd 2>(省略)

というスクリプトでhttpdのサービスは一時的にでも止まりますか?
それともこれは、catで出力しているプロセスが止まるのでしょうか?

logrotate.d/httpd 内にあるスクリプトです

0

2Answer

・連絡は 2回に分けますね.
・当方は Ubuntu ですので、httpd ではなく apache2 ですが、読み替えてください

/var/run/httpd の中に記述されている数値のプロセスは「親プロセス」のようです.

で、「kill -HUP cat /var/run/httpd/ 2> 省略」によって、(親に付随している) 子プロセスのみを再起動するようです.

具体例を含めて、次の方法で動作が確認できるかと思います.

1. 端末を開く...「端末1」とする
2. 「端末1」にて、/var/run/httpd の値を見る
$ sudo cat /var/run/httpd
3008
3. 「端末1」にて、watch コマンドを使って 2秒間隔でプロセス 3008 と、その子プロセスを監視する
$ watch pstree -a -p 3008
 apache2,3008 -k start
  ├─apache2,7672 -k start
  ├─apache2,7673 -k start
  ├─apache2,7674 -k start
  ├─apache2,7675 -k start
  └─apache2,7676 -k start
4. 別の端末を開く...「端末2」とする
5. 「端末2」にて、kill -HUP 3008 を発行する
$ sudo kill -HUP 3008
6. 上記 3 の watch の結果のうち、子プロセスの ID が変化する

上記 3 では 7672〜7676 だった PID が、本項では 16871〜16875 へと変化している.
ただし、親プロセスである 3008 はそのまま存在している.

apache2,3008 -k start
  ├─apache2,16871 -k start
  ├─apache2,16872 -k start
  ├─apache2,16873 -k start
  ├─apache2,16874 -k start
  └─apache2,16875 -k start
0Like

kill -HUP で「子プロセスのみ」が再起動するのは、apache の仕様のようです.
HUPを受けたときの挙動は、プログラムによって異なるはずです。(実装依存)。

急な再起動
シグナル: HUP
apachectl -k restart
HUP あるいは restart シグナルを親プロセスに送ると、 TERM と同様に 子プロセスを kill しますが、 親プロセスは終了しません。 設定ファイルを再読込して、ログファイル全てを開き直します。 その後、新しい子プロセスを起動して応答を続けます。

0Like

Your answer might help someone💌