runitはオペレーティングシステム (OS) 全体におけるプロセスの初期化・管理・完了を行う、Unix系オペレーティングシステム用のinitおよびサービス管理スキームである。runitはdaemontoolsプロセススーパービジョンツールキットの再実装で、多くのLinuxベースのOSだけでなく、BSDやSolarisでも動作する。runitはシステムサービスのスタートアップ並列化を特徴とするので、OSのブート時間を短縮できる。
runitはinitデーモンとして起動されると、他の全てのプロセスについての直接的または間接的な祖先となる。runitはブート中に開始される最初のプロセスで、システムがシャットダウンされるまで起動し続ける。runitは独立したサービスマネージャとして、他のinitシステムと共に使用されることも多い。サービスマネージャの役割により、非特権ユーザーが個人的なサービスを統合したり、initシステムは管理しないのに現在使用中のサービスをルートユーザーが管理するために使用できる。
設計
runitのコードベースは小さく、モジュール形式でなおかつポータブルであることに重点が置かれている。runitにおけるinitの役割は、1回の初期化・プロセスのスーパービジョン・停止または再起動の3段階に分けられる。1段階目と3段階目は実行されるオペレーティングシステムに適合させねばならないが、2段階目はPOSIX準拠のOS全てに移植できる。これら3つの段階は、それぞれ1・2・3という名前が付いた3つの実行ファイル(通常はシェルスクリプト)で設定できる。
2段階目は通常runsvdirという名前のバイナリを呼び出す。これはグローバルデーモン管理を担当するプロセスである。runsvdirは引数で渡されたフォルダ内にある全てのデーモンそれぞれに対し個別にウォッチドッグを生成すると、生成されたウォッチドッグ各々がデーモン(およびそれに関連付けられたロガーサービス)を起動して、死んだ場合は再起動する。runsvdirはデーモンが追加または削除された場合、そのウォッチドッグをkillしたり新しいウォッチドッグを開始したりする。特有の名前が付いた実行ファイルは、デーモンのライフにおける様々なフェイズ (run, check, finish, ...) を説明するために使用される。その実行ファイルはシグナルを傍受したり特定のスクリプトがあればそれを実行することもでき、デーモン制御インタフェースを公開するために名前付きパイプを作成する。
利用
runitはsysvinitの一時的な代替としても、サービスのスーパーバイザーとしても使われる(後者の場合、inittabファイルで指定されたプロセスを起動するPIDが1である親プロセスのsysvinitと共に使われたり、sysvinit以外の他のinitシステムと共に使われる)。Ruby on Railsを起動できるソフトウェアであるRubyWorksスタックは、そのスイートにrunitを組み入れた。
採用
runitがデフォルトinitシステムであるOSは以下の通り:
- antiX(Debianベース、バージョン19より)
- Dragora GNU/Linux-Libre(Dragora 2より)
- Void Linux
runitが「公式に」利用できるinitシステムであるOSは以下の通り:
- Artix Linux(Archベース)
- Devuan(Debianベース、バージョン3.1.0より)
- Gentoo Linux
- Hyperbola GNU/Linux-libre(ArchおよびDebianベース)
脚注
外部リンク
- runit
- runit - GitHub




