Daemontools

は、ダニエル・バーンスタインによって開発された、Unix系OSにおけるサービス管理のためのツールのパッケージである。Unix系OSにおける、rc.d、rc.local、inittab などのinitの代替としてデーモンを起動させることができる。2007年11月よりパブリックドメインとなった。

概要 
daemontools は、Unix系OSにおけるサービスの管理作業(プロセス監視、ロギングなど)をシンプルな手法で行うための支援ツールである。たとえば、supervise というプログラムは、フォアグラウンド起動させたデーモンプロセスの監視を行い、multilog というプログラムは、パイプ経由で取りこぼしなくログの記録ができる。daemontools においては スーパーユーザー権限の絞り込みが行われるため、よりセキュアな運用が可能である。

daemontools では、設定により変更可能であるが、/services というルート直下のディレクトリに各種デーモン用のサービスディレクトリを個別に配置し、各サービスディレクトリに起動スクリプト等を配置する。また監視対象のプロセスは、フォアグラウンドで起動させる必要がある。たいていのデーモンはフォアグラウンドでの起動が可能だが、バックグラウンドでしか起動できないデーモンの場合は、daemontools に含まれる fghack ユーティリティを使用してフォアグラウンドで起動させる。

djbの開発したinetd代替ソフトウェアであるucspi-tcpを併用することでさらにきめ細かい管理を行うことができる。

djbの開発したdjbdnsや、qmailのみならず、ApacheやPostfix、MySQL、IRCのボットなども daemontools の管理下におくことができる。工夫を凝らしたさまざまな起動スクリプトがインターネット上で公開されている。

主なツール 
daemontools はパッケージの総称であり daemontool というプログラム自体は存在しない。この節では、daemontoolsに含まれるいくつかのユーティリティを用途別に紹介する。

svscan - サービスディレクトリ群の監視 
svscan は /services ディレクトリ直下を監視し、ディレクトリを発見すると、そのディレクトリ内でサービス管理デーモン supervise を起動する。

supervise - プロセスの制御と監視 
supervise は、カレントディレクトリ (/service/サービスディレクトリ) 直下の run という名称のプロセス起動用のコマンドを実行する。
多くの場合、run コマンドはシェルスクリプトで記述されており、その中でデーモンの実行に必要な環境変数等を設定し、起動したいデーモンのコマンドをexecするという構造になっている。
run プロセス (exec したデーモンプロセス) が何らかの理由で終了すると、supervise はその度に run を実行する。

デーモンの起動や停止 (プロセスへのシグナルを送信) をする場合は svc コマンドを使用して supervise に指示する。。
svc コマンドの使用により各種デーモンの停止、起動を統一的な方法で管理することができる。
また、プロセス番号を意識することなく TERM、KILL、HUP などのシグナルを送ることができる。

supervise で起動されたプロセスは、svstatで、死活や起動時間を確認することができる。

multilog - ロギング 
multilogは、標準入力からのパイプを処理し、指定したログファイルに出力する。ログの取得にUDPパケットではなく、Unixパイプを使用するため高負荷時でもsyslogdのような取りこぼしがおきない。ログのタイムスタンプはtai64n ユーティリティにより、TAI64N (Temps Atomique International)フォーマットで記録される。このフォーマットは正確だが可読性が低いため、ログ閲覧時は、tai64nlocal フィルタを用いてひとの読める形式に変換する。

関連項目 
qmail
djbdns
ダニエル・バーンスタイン
init
国際原子時
デーモン

外部リンク 
 daemontools
 the djb way: daemontools
 runit - collection of run scripts - run スクリプトのコレクション

UNIXのソフトウェア
システムソフトウェア
ダニエル・バーンスタイン