SYONテクニカル

「daemontools」を利用したサービス監視

2005/11/28
サイオンコミュニケーションズ株式会社
大城 智博

1.はじめに

皆さんは「Webサービスが突然停止してしまった!」などの経験はありませんか?
今回はそんな時の為のサービス(デーモン)の管理ツール「daemontools」の紹介を致します。

「daemontools」は、常にサービスの監視を行い何らかの原因により異常停止した場合には、自動的に再起動する便利な機能を有しており、障害発生時に長時間サービスが停止する状態を防ぐことができます。

 

2.マシン環境

今回、設定するマシン環境は次のとおりです。

FreeBSD 5.4-RELEASE
daemontools-0.76_11
apache-2.0.55

 

3.「daemontools」の設定と起動

3.1 daemontoolsのインストール

portにてdaemontoolsをインストール

# cd /usr/ports/sysutils/daemontools/
    # make
    # make install
    # make clean

 

3.2 svscanの設定

svscanが起動するように、confファイルに設定を追加

# vi /etc/rc.conf
    svscan_enable="YES"
    svscan_servicedir="/var/service"

監視するディレクトリを作成し、svscanを起動

# mkdir /var/service
    # /usr/local/etc/rc.d/svscan.sh start

svscanが正常に動作していることを確認

# ps -x | grep svscan
    564  ??  S      0:00.01 /usr/local/bin/svscan /var/service

 

3.3 監視対象のサービス起動スクリプトの設置

サービス毎のディレクトリを作成し、その中に起動ファイル名を必ずrunとして作成
※例としてapache2を関し対象とします(apache2のインストールは省略)

# mkdir /var/service/apache2
    # vi /var/service/apache2/run
    #!/bin/sh
    exec softlimit -c 0
        env PATH=/usr/local/sbin:/usr/bin:/usr/local/bin:/bin
        /usr/local/sbin/httpd -DNO_DETACH -f /usr/local/etc/apache2/httpd.conf 2>&1

注)フォアグラウンドで動かす必要がありますので、-DNO_DETACHオプションを付けます。

svscanは監視ディレクトリ内にサブディレクトリが作成されると、superviseプロセスをを起動させsuperviseがサービスの監視・起動を担当することになります。

superviseにより、ディレクトリが作成されapacheが起動したことを確認します。

(レイアウトの都合上一部の行を折り返しています)

# ls -l /var/service/apache2/
    total 4
    -rwxr-xr-x  1 root  wheel  181 Nov 21 15:07 run
    drwx------  2 root  wheel  512 Nov 21 15:45 supervise
    #
    # ls -l /var/service/apache2/supervise/
    total 2
    prw-------  1 root  wheel   0 Nov 21 15:45 control
    -rw-------  1 root  wheel   0 Nov 21 15:45 lock
    prw-------  1 root  wheel   0 Nov 21 15:45 ok
    -rw-r--r--  1 root  wheel  18 Nov 21 15:45 status

    # ps -ax | grep http
    2601 ?? Ss 0:01.07 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2602 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2603 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2604 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2605 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2606 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf

 

4.superviseの動作確認

上記のWebサービスをkillコマンドにて強制終了し、自動的に起動することを確認します。

(レイアウトの都合上一部の行を折り返しています)

# kill -9 2601 2602 2603 2604 2605 2606 2685
    # ps -ax | grep http
    2743 ?? Ss 0:01.07 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2744 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2745 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2746 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2747 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf
    2748 ?? S  0:00.00 /usr/local/sbin/httpd -DNO_DETACH
    -f /usr/local/etc/apache2/httpd.conf

正常に動作しているなら、killコマンドにて停止したWebサービスが、別pidにて起動したことが確認できます。

 

5.サービス制御

supervise監視下にある、サービスを制御するにはsvcコマンドを使用します。

一時的にサービスを停止するにはオプションに”-d”を使用します。

# svc -d /var/service/apache2/

一時的に停止したサービスを再開するにはオプション”-u”を使用します。

# svc -u /var/service/apache2/

サービスの設定変更時などに再起動する必要がある場合はオプション”-t”を使用します。

# svc -t /var/service/apache2/

svscanの再起動時などでも、サービスを起動したくない場合は、サブディレクトリにdownファイルを作成します。

# touch /var/service/apache2/down

 

6.最後に

daemontoolsはqmailではよく使われますが、他のサービスではあまり使われていない気がします。非常に便利な機能ですので、これを機会にいろいろなサービスでお試しになってみてはいかがでしょうか?

Copyright 1999-2008 SYON Communications, Co. All rights reserved