Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
Runitのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Runit
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:Init]] [[en:Runit]] {{Related articles start}} {{Related|init}} {{Related articles end}} {{Warning|Arch Linux は [[systemd]] のみを公式にサポートしています。runit を init システムとして使用する場合は、サポートリクエストにその旨を明記してください}} Runit はプロセススーパーバイザーです。pid1 として sysv の init を置き換えることができる {{ic|runit-init}} が含まれており、inittab から起動することができます。他の init システムを使うこともできます。Runit はシンプルなツールの集合であり、柔軟性のある依存関係や分散された環境を構築することができます。また、ランレベルの変更を極めて高速に行うことが可能です。 例については [[Runit#ユーザーレベルサービス|ユーザーレベルサービス]] を参照してください。 == インストール == === systemd と一緒に runit を使用する === ==== BusyBox の実装を使用する ==== [[BusyBox]] は、単純な処理監視のニーズに使用できる runit の最小限の実装を提供します。まず、必要となるツールの BusyBox バイナリへのシンボリックリンクを作成します。 # busybox --list | awk '/^runsv|^chpst$|^sv/' | xargs -I{} ln -sv /usr/bin/busybox /usr/local/bin/{} その後、必要に応じて BusyBox の runit を実行するために [[systemd]] ユニットファイルを作成できます。 {{hc|1=/etc/systemd/system/busybox-runit.service|2=[Unit] Description=Runit service supervision - BusyBox implementation Documentation=man:busybox(1) http://smarden.org/runit/ [Service] Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/bin" ExecStart=/usr/local/bin/runsvdir -P /var/service KillSignal=SIGHUP KillMode=process Restart=always SuccessExitStatus=111 [Install] WantedBy=multi-user.target}} {{hc|1=${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user/busybox-runit.service|2=[Unit] Description=Runit service supervision - BusyBox implementation Documentation=man:busybox(1) http://smarden.org/runit/ [Service] Environment="HOME=%h" "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin" ExecStart=/usr/local/bin/runsvdir -P %h/service KillSignal=SIGHUP KillMode=process Restart=always SuccessExitStatus=111 [Install] WantedBy=default.target}} {{Note| * このユニットファイルの例では、有効なサービスを含むディレクトリがシステムインスタンスの場合は {{ic|/var/service}}、ユーザーインスタンスは {{ic|$HOME/service}} であることを前提としています。このパスは、それぞれの特定の使用例に応じて変更できます。 * {{ic|SIGHUP}} kill シグナルは、デフォルトの {{ic|SIGTERM}} の代わりに、メインの ''runsvdir'' プロセスでのみ使用されます ({{ic|1=KillMode=process}} のおかげで) これにより、BusyBox の runit 実装によって制御されているプロセスは、スーパーバイザーを終了する前に ''runsvdir'' によって制御可能に停止されます。''runsvdir'' が {{ic|SIGHUP}} シグナルを受信した後に監視されているプロセスを終了すると、ステータスコード 111 で終了します。これは成功として解釈する必要があります。}} 作成した systemd ユニットファイルに従って、''runsvdir'' が監視するディレクトリを必ず作成してください。runit サービスを保存できるディレクトリ (通常は {{ic|/etc/sv}}) を作成し、監視対象のディレクトリから runit サービスへのシンボリックリンクを作成して、必要な場合にのみ有効にすることもお勧めします。詳細については、[[Runit#一般的な使用| 一般的な使用方法]] を参照してください。 すべてが正しく設定されている場合、{{ic|busybox-runit.service}} は [[systemd#ユニットを使う|有効化され、開始されます]] ==== 標準 Runit の使用 ==== runit を、デフォルトの Arch Linux の init システム ([[systemd]]) と一緒に単純なプロセススーパーバイザーとして使用することができます。この目的のために、ステージスクリプトを必要としないベアボーン Runit インストールを提供する {{aur|runit-systemd}} をインストールします ({{ic|<nowiki>/etc/runit/{1..3}</nowiki>}}) またはランレベル ({{ic|/etc/runit/runsvdir/*}}) これらは通常、runit を init システムとして使用する場合にのみ役立ちます。 このパッケージは、目的の runit サービスを配置できるディレクトリ ({{ic|/var/service}}) と、そのディレクトリの runit 監視を開始する systemd ユニットを提供します。{{ic|/var/service}} で設定されたサービスのみが runit によって監視されます。{{ic|runit.service}} を [[systemd#ユニットを使う|有効にして開始]] するだけです。 == 使い方 == === ツール === * {{ic|sv}} - サービスの制御、サービスの状態の取得、依存関係のチェックなどに使います。 * {{ic|chpst}} - メモリ制限、コア制御、データセグメント、ユーザー・グループの権限などプロセスの環境を制御します。 * {{ic|runsv}} - プロセスを監視してログを保存します。 * {{ic|svlogd}} - シンプルで強力なロガー。時間や容量などによる自動ローテート、ポストプロセス、パターンマッチ、ソケット (リモートログ) などが使えます。logrotate でログをローテートする必要はもうありません。 * {{ic|runsvchdir}} - サービスレベル (ランレベル) を変更します。 * {{ic|runsvdir}} - 監視ツリーを起動します。 * {{ic|runit-init}} - dietlibc が静的にコンパイルされた PID 1 です。PID 1 として必要なことしかしません。 使用方法については man ページを読んでください。 === ランレベルとサービスディレクトリ === Runit はシンボリックリンクのディレクトリを使ってランレベルを指定します。ただし {{ic|/etc/runit/1}}, {{ic|/etc/runit/2}}, {{ic|/etc/runit/3}} に定義されるランレベルは別です。 1 はシステムをブートストラップし、2 は {{ic|/service}} の runsvdir を起動し、3 はシステムを停止します。 ランレベル 2 では、好きな数だけサービスレベルを使うことができます。{{ic|/etc/runit/runsvdir/}} に作成した (サービスディレクトリのシンボリックリンクが含まれた) ディレクトリを指定して runschdir を実行できます。{{ic|runsvchdir <theservicedir>}} を実行するだけで他のマシンのサービスを引き継ぐことができるため、HA (フェイルオーバー) 構成で非常に便利です。 ユーザーレベルの監視ディレクトリを作成して依存関係のサービスレベルのツリーを実行することもできます。下の[[#ユーザーレベルサービス|ユーザーレベルサービス]]を見てください。 === 一般的な使用方法 === 実行中のサービスを確認: {{hc|# sv s /service/*| run: /service/agetty-2: (pid 4120) 7998s run: /service/agetty-3: (pid 4119) 7998s run: /service/bougyman: (pid 4465) 7972s run: /service/bougyx: (pid 4135) 7998s; run: log: (pid 4127) 7998s un: /service/cron: (pid 4137) 7998s; run: log: (pid 4122) 7998s run: /service/dialer: (pid 4121) 7998s run: /service/qmail: (pid 4138) 7998s; run: log: (pid 4126) 7998s run: /service/smtpd: (pid 4136) 7998s; run: log: (pid 4125) 7998s run: /service/socklog-klog: (pid 4139) 7998s; run: log: (pid 4132) 7998s run: /service/socklog-unix: (pid 4133) 7998s; run: log: (pid 4124) 7998s run: /service/ssh: (pid 4134) 7998s; run: log: (pid 4123) 7998s}} サービスは {{ic|/etc/sv}} に存在している必要があります。 サービスを作成して起動: {{bc|# ln -s /etc/sv/ssh /service/ssh}} サービスをすぐに停止: {{bc|# sv d ssh}} サービスを再起動: {{bc|# sv t ssh}} サービスをリロード: {{bc|# sv h ssh}} サービスやログサービスの状態を表示: {{bc|# sv s ssh}} サービスを停止して無効化: {{bc|# rm /service/ssh}} 詳しくは {{ic|sv}} の man ページを見てください。 システムをシャットダウン: {{bc|# runit-init 0}} システムを再起動: {{bc|# runit-init 6}} == ユーザーサービス == ユーザー監視ツリーを作成するには、[[Systemd/ユーザー]] サービスを使用する方法と runit 自体を使用する方法の 2 つがあります。例については、[[Runit#BusyBox の実装の使用|BusyBox の実装の使用]] を参照してください。 === サービス例 === {{Note|この例では、サービスが {{ic|~/.config/sv}} に保存されており、runsvdir が {{ic|~/service}} であると想定しています。設定に合わせて変更する必要があります。}} サービスを保存するディレクトリを作成します。 $ mkdir -p ~/.config/sv サービスのディレクトリを作成します。 $ mkdir ~/.config/sv/mpd サービスディレクトリに {{ic|run}} ファイルを [[作成]] します。実行ファイルの例は [http://smarden.org/runit/runscripts.html runit のサイト] にあります。 {{hc|1=$HOME/.config/sv/mpd/run|2= #!/bin/sh MPDCONF=${XDG_CONFIG_HOME:-$HOME/.config}/mpd/mpd.conf exec mpd --no-daemon $MPDCONF }} [[ヘルプ:読み方#実行可能属性の付与実行可能|実行可能属性を付与]] します。 サービスを有効にするには、サービスディレクトリへのシンボリックリンクを作成します。これにより、runit の開始時にサービスが自動的に開始されます。サービスはすぐに開始されるはずです。 $ ln -s ~/.config/sv/mpd ~/service/mpd サービスを停止するには: $ SVDIR=~/service sv down mpd # or $ sv down ~/service/mpd サービスを再度開始するには: $ SVDIR=~/service sv up mpd # or $ sv up ~/service/mpd == ヒントとテクニック == === メモリ上で PostgreSQL の読み取り専用スレーブデータベースを実行 === 以下のレシピは非常に高速な読み取り速度を必要とするデータベースのためのものです。PostgreSQL のストリーミングレプリケーションとホットスタンバイモードを使っています。 ==== 要件 ==== * [[PostgreSQL]] 9.0 以上 * {{AUR|arch-runit-services}}{{Broken package link|パッケージが存在しません}} * [[Rsync]] ==== 手順 ==== 1. {{ic|/etc/sv/pg_mem/log}} ディレクトリを作成: {{bc|# mkdir -p /etc/sv/pg_mem/log}} 2. 以下の3つのファイルを作成 {{hc|/etc/sv/pg_shm/run|<nowiki> #!/bin/sh -e sleep 3 # Give postgresql a chance to start and replay any transactions . /etc/conf.d/pg_shm # Read any conf vars PG_DISK_ROOT=/var/lib/postgres # Where the 'master' data directory lives [ -d "$PGROOT" ] || mkdir -p "$PGROOT" # Create the new $PGROOT if it does not exist sv -w7 c postgresql 2>&1 # Stop the main postgres from making changes by enttering backup mode psql -U postgres -c "SELECT pg_start_backup('seed',true)" 2>&1 # Sync the main postgres data dir to our new $PGROOT rsync --progress --delete -a "$PG_DISK_ROOT/data" "$PGROOT/" --exclude=postmaster.pid 2>&1 # Allow changes on the primary server again psql -U postgres -c "SELECT pg_stop_backup()" 2>&1 # Set up the hot standby mode on the slave server echo "hot_standby = 'on'" >> "$PGROOT/data/postgresql.conf" echo "port = $PGPORT" >> "$PGROOT/data/postgresql.conf" echo "standby_mode = 'on'" >> "$PGROOT/data/recovery.conf" echo "primary_conninfo = 'host=localhost port=5432 user=postgres'" >> "$PGROOT/data/recovery.conf" echo "trigger_file = '/tmp/stop_replication'" >> "$PGROOT/data/recovery.conf" echo "restore_command = 'cp /var/lib/postgres/archive/%f \"%p\"'" >> "$PGROOT/data/recovery.conf" exec chpst -u postgres /usr/bin/postgres -D "$PGROOT/data" -c config_file="$PGROOT/data/postgresql.conf" 2>&1</nowiki>}} {{hc|/etc/conf.d/pg_shm|<nowiki> PGROOT=/dev/shm/pg_mem PGPORT=5434 PGLOG="/var/log/pg_mem.log"</nowiki>}} {{hc|/etc/sv/postgresql/finish| #/bin/sh sv -v i pg_shm}} 3. run と finish に実行可能属性を付与: {{bc|# chmod 700 /etc/sv/pg_mem/run}} {{bc|# chmod 700 /etc/sv/postgresql/finish}} 4. ログサービスを作成: {{bc|# ln -s /usr/bin/rsvlog /etc/sv/pg_shm/log/run}} 5. {{ic|/var/lib/postgres/data/postmaster.conf}} を編集して WAL アーカイブを有効にしてください。詳しくは [http://wiki.postgresql.org/wiki/Streaming_Replication#How_to_Use こちら] のステップ3と4を見てください。 6. postgresql を再起動: {{bc|# sv i postgresql}} 7. pg_shm を起動: {{bc|# ln -s /etc/sv/pg_shm /service}} 8. 動作していることを確認: {{bc|# sv s postgresql pg_mem}} PostgreSQL のオンディスクデータベースのレプリカがポート 5434 から読み取り専用モードで使うことができるはずです。
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Aur
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
Runit
に戻る。
検索
検索
Runitのソースを表示
話題を追加