2004.11.21新規作成。
2005.9.4更新。
daemontoolsは、サービス(デーモン)を起動したり状況を確認するツール。サービスを統一的に扱うことができる。
daemontoolsは、下記から入手できる。
まずはアーカイブを展開する。結構不思議なディレクトリ構成になっている。また、コンパイル、インストール方法も一風変わっている。
展開すると、次のようなディレクトリ構成になっている。
admin/daemontools-0.76/package /src
とりあえず展開して、ディレクトリ構成を調整する。
/opt/src$ tar xzvf daemontools-0.76.tar.gz /opt/src$ mv admin/daemontools-0.76 . /opt/src$ rmdir admin
オリジナルそのままではコンパイルエラーになるので、パッチを当ててからコンパイルする。patches for djb tools
コンパイルからインストールまでは、package/install コマンド一発でできる。install コマンドは、内部で compile, upgrade を呼び出し、さらにrunコマンドでsvscanを起動する。
ステップごとに見ていくと、compileコマンドは、commandディレクトリを作成し、そこにコンパイル済みのコマンドを格納していく。
/opt/daemontools-0.76$ patch -s -p1 < daemontools-0.76-q1.diff /opt/daemontools-0.76$ package/compile
インストールは、package/upgrade コマンドで行う。これは、/command ディレクトリを作成し、そこから上記の実体へのリンクを張っていく。さらに、/usr/local/bin からもリンクを張る。
package/run コマンドは、/service ディレクトリを作成する。加えて、/etc/inittab ファイルにsvscanboot コマンドを起動するための行を追加し、実行する。
/opt/daemontools-0.76$ su /opt/daemontools-0.76# package/upgrade /opt/daemontools-0.76# package/run
Fedora 9 Linuxで、起動時タスクの処理が /sbin/init デーモンから upstart に変更になりました。/etc/inittab ファイルは使われなくなり、/etc/event.d/ 以下に記述するようになりました。
とりあえずは、/etc/rc.d/rc.local ファイルに svscanboot コマンドを起動する行を加筆すれば大丈夫です。
インストール後は、次のようなディレクトリ構成になる。
/command 各コマンドへのリンクが生成される。 /service /opt/daemontools --> daemontools-0.76へのシンボリックリンク /daemontools-0.76 /command
/etc/inittab には、次の行が加わる。
SV:123456:respawn:/command/svscanboot
サービス(デーモン)を登録するには、/service ディレクトリにサブディレクトリを作ればいい。そのサブディレクトリにrun というコマンドがあれば、自動的に起動される。
/service に作るディレクトリは、別のディレクトリへのシンボリックリンクでもよい。また、ディレクトリ名が'.'で始まる場合は無視される。
runコマンドを書くときの注意:
例えば、clockspeedを起動するためのスクリプトを書いてみる。これを /service/.clockspeed/runとして保存する。runファイルには実行属性を付けておく。
#!/bin/sh exec -c /usr/local/bin/clockspeed
execコマンドは、現在のプロセスを置き換える形でプログラムを実行する。POSIXポータブルな書式は次のとおり。
exec [command [argument...]]
bashは、上記に加え、-c, -l, -aオプションを持つ。-c オプションは、環境変数を空にしてからcommand を起動する。
envコマンドもよく使う。envコマンドは環境変数を変更した上でプログラムを実行する。POSIXでの書式は次のとおり。
env [-i] [name=value]... [command [argument...]]
-iオプションは、引き継いだ環境変数を無視して、空の環境から始める。
そしてclockspeedへ名前を変更する。
# mv .clockspeed clockspeed
サービスが動いているかどうかは、svstatコマンドで確認できる。引数としてディレクトリ名を付ける。
# svstat /service/clockspeed /service/clockspeed: up (pid 28727) 61 seconds
サービスの状態を表示したり、サービスを一時停止したりするのは、svstatコマンド、svcコマンドで行う。
svcコマンドは次のように書く。ディレクトリ名は、サービスのディレクトリ(/service/clockspeed など)。
# svc オプション ディレクトリ名
オプションは、下記のとおり。The svc program
設定の変更を有効にするために、サービスをいったん終了させたいときは、次のようにする。runスクリプトを書き換えるときもこのコマンドを使う。
# svc -t /service/dnscache
一時的な停止と再開。
# svc -d /service/dnscache # svc -u /service/dnscache
サービスを終了させるには、/service/foo を /service/.foo に名前を変えた上で、-tx オプションをつけてsvcを呼び出す。
svstat コマンドは、サービスの状態を表示する。
# svstat /service/dnscache /service/dnscache: up (pid 21578) 203 seconds