daemontoolsを使う
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
Note.
|
インストール後は、次のようなディレクトリ構成になる。
/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
Note.
|
そしてclockspeedへ名前を変更する。
# mv .clockspeed clockspeed
サービスが動いているかどうかは、svstatコマンドで確認できる。引数としてディレクトリ名を付ける。
# svstat /service/clockspeed /service/clockspeed: up (pid 28727) 61 seconds
サービスの制御
サービスの状態を表示したり、サービスを一時停止したりするのは、svstatコマンド、svcコマンドで行う。
svc - サービスの停止と再開、サービスにシグナルを送る
svcコマンドは次のように書く。ディレクトリ名は、サービスのディレクトリ(/service/clockspeed など)。
# svc オプション ディレクトリ名
オプションは、下記のとおり。The svc program
- -u: Up. If the service is not running, start it. If the service stops, restart it.
- -d: Down. If the service is running, send it a TERM signal and then a CONT signal. After it stops, do not restart it.
- -o: Once. If the service is not running, start it. Do not restart it if it stops.
- -p: Pause. Send the service a STOP signal.
- -c: Continue. Send the service a CONT signal.
- -h: Hangup. Send the service a HUP signal.
- -a: Alarm. Send the service an ALRM signal.
- -i: Interrupt. Send the service an INT signal.
- -t: Terminate. Send the service a TERM signal.
- -k: Kill. Send the service a KILL signal.
- -x: Exit. supervise will exit as soon as the service is down. If you use this option on a stable system, you're doing something wrong; supervise is designed to run forever.
設定の変更を有効にするために、サービスをいったん終了させたいときは、次のようにする。runスクリプトを書き換えるときもこのコマンドを使う。
# svc -t /service/dnscache
一時的な停止と再開。
# svc -d /service/dnscache # svc -u /service/dnscache
サービスを終了させるには、/service/foo を /service/.foo に名前を変えた上で、-tx オプションをつけてsvcを呼び出す。
svstat - サービスの状態を表示
svstat コマンドは、サービスの状態を表示する。
# svstat /service/dnscache /service/dnscache: up (pid 21578) 203 seconds
サイト内関連文書
- Linuxで時計をあわせる (clockspeed)
- システムの時計を調整し、時刻をただしく刻むには。
- qmailのインストール
Note.