FreeBSD Daily Topics

2013年1月30日FreeBSDサービス制御(fscd、fscadm)機能の使い

tools

FreeBSD Services Control(fsc)

FreeBSD Quarterly Status Report April-June, 2012において、FreeBSDサービス制御(fsc)がPorts Collectionに登録されたことが紹介されています。sysutils/fscに追加されています。

fsc(FreeBSD Services Control)は、FreeBSDが提供しているサービス制御機構rc(8)およびservice(8)などに、さらにモニタリングと自動再起動の機能を追加するものです。Daemontools (sysutils/daemontools)のFreeBSD版のようなものだと考えるとわかりやすいかもしれません。sysutils/fscをインストールすると次のような情報が得られます。

% pkg info -f fsc
Name           : fsc
Version        : 1.0.1_1
Origin         : sysutils/fsc
Prefix         : /usr/local
Categories     : sysutils
Maintainer     : trhodes@FreeBSD.org
WWW            : UNKNOWN
Comment        : The FreeBSD Services Control family of utilties.
Flat size      : 41 kB
Description    : 
The FreeBSD Services Control software provides service
monitoring, restarting, and event logging for FreeBSD
servers.  The core functionality is a daemon (fscd)
which is interfaced with using fscadm.  See manual pages
for more information.


% 


% pkg info -l fsc
fsc-1.0.1_1 owns the following files:
/usr/local/bin/fscadm
/usr/local/etc/rc.d/fscd
/usr/local/man/man5/fscd.conf.5.gz
/usr/local/man/man8/fscadm.8.gz
/usr/local/man/man8/fscd.8.gz
/usr/local/sbin/fscd

%

fscは主に次のソフトウェアと設定ファイルで構成されています。

  • fscd(8) : FreeBSDサービス制御デーモン。サービスをモニタリングし、対象サービスが終了した場合にサービスを再度立ち上げる処理を担当する
  • fscadm(1) : FreeBSDサービス制御管理ユーティリティ。fscd(8)に接続して管理を実施。現在モニタリングしているサービス一覧の表示、モニタリング対象を追加したり削除するといった操作が可能。指定できるコマンドはenable、disable、status、close、shutdownなど
  • fscd.conf(5) : fscd(8)用の設定ファイル。モニタリングするサービスを1行に1つ記述する。#からはじまる業はコメントとして無視される。デフォルトのデプロイパスは/usr/local/etc/fscd.conf

fscはほかのモニタリングツールと比べ、FreeBSDの提供しているサービス制御機構rc(8)をそのまま使っているため、FreeBSDと親和性が高いという特徴があります。

Daemontoolsを使っている場合、fscは代替可能な対象として候補に入れておくとよいかもしれません。次に簡単に使い方を紹介しておきます。

fscで制御するサービスは/etc/rc.confや/etc/rc.conf.localなどでenable指定されたサービスです。そうしたサービスの中から、fscで制御したい対象を/usr/local/etc/fscd.confファイルに書いておきます。1行1サービス名です。たとえば次のような設定ファイルを用意します。

powerd
rpcbind
nfsuserd
nfsclient
nfscbd
rpc_statd
rpc_lockd
ntpdate
lpd
smartd
apache22

fscd(8)を起動したいので、/etc/rc.confに次の設定を追加します。

fscd_enable="YES"

システムを再起動するか、直接fscd(8)デーモンを起動します。

# service fscd start
tarting fscd.
# 

fscadm(1)を使ってみましょう。まず、statusサブコマンドを実行して、モニタリングしているサービスと、そのプロセス番号の情報を一覧表示させます。

# fscadm status
The fscd pid is 52608.
process name                             pid
--------------------------------------------------
apache22                                 1055
smartd                                   52434
lpd                                      995
nfscbd                                   1087
nfscbd                                   1086
nfsuserd                                 973
nfsuserd                                 972
nfsuserd                                 971
nfsuserd                                 970
nfsuserd                                 969
rpcbind                                  941
powerd                                   1019
# 

試しにサービスを強制終了してみます。ここではsmartd(8)をkill(1)で終了させます。次のように、終了したにも関わらず再起動されていることがわかります。kill(1)を実行する前と後でsmartd(8)のプロセス番号が変わっていることを確認できます。

# kill 52434
# fscadm status 
The fscd pid is 54172.
process name                             pid
--------------------------------------------------
apache22                                 1055
smartd                                   54559
lpd                                      995
nfscbd                                   1087
nfscbd                                   1086
nfsuserd                                 973
nfsuserd                                 972
nfsuserd                                 971
nfsuserd                                 970
nfsuserd                                 969
rpcbind                                  941
powerd                                   1019
#

fscadm(8)でsmartdをdisableしてからsmartd(8)を終了させてみると、次のように起動してこなくなります。

# fscadm disable smartd
Service removed.
# procstat 54559
  PID  PPID  PGID   SID  TSID THR LOGIN    WCHAN     EMUL          COMM        
54559     1 54558 54558     0   1 daichi   nanslp    FreeBSD ELF64 smartd      
# service smartd stop
Stopping smartd.
Waiting for PIDS: 54559, 54559.
# fscadm status
The fscd pid is 54172.
process name                             pid
--------------------------------------------------
apache22                                 1055
lpd                                      995
nfscbd                                   1087
nfscbd                                   1086
nfsuserd                                 973
nfsuserd                                 972
nfsuserd                                 971
nfsuserd                                 970
nfsuserd                                 969
rpcbind                                  941
powerd                                   1019
#

再びsmartd(8)をモニタリング対象として有効にすると、自動的にsmartd(8)が起動されることがわかります。

# fscadm enable smartd
Monitoring service.
# fscadm status
The fscd pid is 54172.
process name                             pid
--------------------------------------------------
smartd                                   55693
apache22                                 1055
lpd                                      995
nfscbd                                   1087
nfscbd                                   1086
nfsuserd                                 973
nfsuserd                                 972
nfsuserd                                 971
nfsuserd                                 970
nfsuserd                                 969
rpcbind                                  941
powerd                                   1019
#

fscは簡単に扱えるモニタリング機能です。再起動することで問題が解決するような運用をしている場合には、便利な機能として利用できます。

おすすめ記事

記事・ニュース一覧