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























