- PR -

logrotate.dが実行されたあと

1
投稿者投稿内容
s_momo2
会議室デビュー日: 2003/05/23
投稿数: 5
投稿日時: 2005-03-09 18:48
お世話になります。
logrotate.dにApache用のログローテーションの設定をしていますが、
これが実行されたあと、Apacheのrestartが行われているという認識であっているでしょうか。
その場合、httpのプロセスは切られずに、持続しているのでしょうか。

自分でrestartを行った場合は、httpのプロセスは切られずにDBなど検索中であっても表示されました。
宜しくお願い致します。

Red Hat Linux release 8.0 (Psyche)
Kernel 2.4.18-14 on an i686
Apache/1.3.29
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2005-03-09 21:17
こんばんわ.

/etc/logrotate.d/httpd を参照してみましょう.
どのように処理されているかわかります.

「自分で」というのは
# /etc/rc.d/init.d/httpd restart
した場合のことでしょうか?
ちなみにその場合,
上記の script を参照すると
start
stop
しています.

以上,ご参考までに.
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-03-09 21:18
引用:

s_momo2さんの書き込み (2005-03-09 18:48) より:
お世話になります。
logrotate.dにApache用のログローテーションの設定をしていますが、
これが実行されたあと、Apacheのrestartが行われているという認識であっているでしょうか。


設定を見ないことには分かりません。
RedHat 8 のデフォルトでは再起動するようになっていたように記憶しています。

引用:

その場合、httpのプロセスは切られずに、持続しているのでしょうか。


apachectl restart(HUPシグナルを送るのも同じ)では切断されます。
apachectl graceful だと切断されません。ただし、こちらを使った
場合にはログのロテートが瞬時には完了しません(てゆーか、
完了しないことを前提に処理するように設定を書かないとダメ)。
RedHat 8 のデフォルトではHUPシグナルを送っていたように
記憶しています。

引用:

自分でrestartを行った場合は、httpのプロセスは切られずにDBなど検索中であっても表示されました。


restart というのが apachectl restart のことであれば、
切断されたはずです。
s_momo2
会議室デビュー日: 2003/05/23
投稿数: 5
投稿日時: 2005-03-10 10:30
kaz様、ぽんす様ありがとうございます。

/etc/logrotate.d/httpd
は、
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
となっています。

自分が行ったと書いたのは、
/usr/local/apache/bin/apachectl restart
の実行です。

/etc/rc.d/init.d/httpd
の方は、stop,startしているのがわかったのですが、
/usr/local/apache/bin/apachectl
は、いまいち解読できませんでした。
(これからしらべます。。)

やはり、DBへの接続のある検索画面を実行中に、
/usr/local/apache/bin/apachectl restart
をしても、結果がちゃんと返ってくるので、維持していると思っているのですが、
違うのでしょうか。
HUPの意味がよくわからないので、これも調べてみます。
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-03-10 13:23
apachectlを見てみました。
ちょっと手元で覗けるものに古いApacheしかなかったので、
1.3.28のものですがご容赦ください。


コード:
    # check for pidfile
    if [ -f $PIDFILE ] ; then
        PID=`cat $PIDFILE`
        if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then
            STATUS="httpd (pid $PID) running"
            RUNNING=1
        else
            STATUS="httpd (pid $PID?) not running"
            RUNNING=0
        fi
(省略)

    PIDファイルを参照して、変数PIDにプロセスNoを格納
    kill -0 でプロセスの生存確認を行い、その結果に応じて変数RUNNINGに状態を格納


コード:
    restart)
        if [ $RUNNING -eq 0 ]; then
      (Apacheが起動していなかった際の処理)
        else
            if $HTTPD -t >/dev/null 2>&1; then
                if kill -HUP $PID ; then
                    echo "\\\\\\\\$0 $ARG: httpd restarted"
                else
                    echo "$0 $ARG: httpd could not be restarted"
                    ERROR=6
                fi
            else
                echo "$0 $ARG: configuration broken, ignoring restart"
                echo "$0 $ARG: (run 'apachectl configtest' for details)"
                ERROR=6
            fi
        fi
        ;;

    httpd -tでhttpd.confのチェックを行い、問題なければkill -HUPでプロセスの再起動を行っている


ということで、apachectlを使用してもkill -HUPを行っているということになります。

引用:

これが実行されたあと、Apacheのrestartが行われているという認識であっているでしょうか。
その場合、httpのプロセスは切られずに、持続しているのでしょうか。

    持続しません。
    実施前と実施後にプロセスリストを表示して(psコマンド等)
    PIDを比較すれば、わかると思います。


引用:

やはり、DBへの接続のある検索画面を実行中に、
/usr/local/apache/bin/apachectl restart
をしても、結果がちゃんと返ってくるので、維持していると思っているのですが、
違うのでしょうか。

    他の機能によって、この結果が実現されている可能性がありますが、
    少なくともApacheの子プロセスは持続していないはずです。

ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-03-10 21:35
引用:

s_momo2さんの書き込み (2005-03-10 10:30) より:
HUPの意味がよくわからないので、これも調べてみます。


とりあえず、「apache のようなデーモン動作するプログラムは
kill -HUP によって再起動するように書かれていることが多い」
とだけ知っておけばよいと思います。

なんでそうなのかというと、デーモンはふつう制御端末から
切り離されるのでSIGHUPが発生することはあり得ないから云々
とゆー話になって長くなるので...
興味があれば『詳解UNIXプログラミング』を読んで下さい。
s_momo2
会議室デビュー日: 2003/05/23
投稿数: 5
投稿日時: 2005-03-11 02:05
Uta様、ぽんす様
ありがとうございます。

実行前と実行後で、psのPIDとserver_statusのPIDを参考に監視したところ、
実行中だったPIDは新しいPIDにて動いていました。
それで結果は返ってきていたのですね。

いろいろと教えていただき、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)