Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
Runitのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Runit
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ブートプロセス]] [[Category:デーモンとシステムサービス]] [[en:Runit]] {{Related articles start}} {{Related|init}} {{Related articles end}} Runit はプロセススーパーバイザーです。pid1 として sysv の init を置き換えることができる {{ic|runit-init}} が含まれており、inittab から起動することができます。他の init システムを使うこともできます。Runit はシンプルなツールの集合であり、柔軟性のある依存関係や分散された環境を構築することができます。また、ランレベルの変更を極めて高速に行うことが可能です。 詳しくは [http://smarden.org/runit/ G. Pape の Runit のページ] を見てください。以下では Arch に Runit をインストールする方法を説明します。 == インストール == init を runit-init で置き換える場合: * {{AUR|sysvinit}} パッケージをインストール ({{Pkg|systemd-sysvcompat}} を置き換えるかという質問に Yes と答えてください)。 * {{AUR|arch-runit}} パッケージをインストール。 * デフォルトランレベルを選択・作成 ([[#ランレベルとサービスディレクトリ]]を参照)。 * ブートローダーのカーネルコマンドラインに {{ic|1=init=/sbin/runit-init}} を追加。 * 再起動。 試すだけを init を置き換えるところまでしたくない場合、Arch 標準の systemd と共存するようにインストールして、{{ic|/var/service}} に配置したサービスのプロセスを監視することもできます。 * {{AUR|arch-runsvdir-init}} パッケージをインストール。 * 既存の init ({{ic|inittab}}, {{ic|rc.local}}, systemd など) を使って {{ic|runsvdir /var/service}} を起動。 {{AUR|arch-runit-services}} パッケージは {{ic|/etc/sv}} にサービスを保存して {{ic|/usr/bin/rsvlog}} をロガーとして使います。 {{AUR|arch-runsvdir-init}} に新しいランレベルを作成して {{ic|/etc/runit/runsvdir/all}} に作成したサービスディレクトリにシンボリックリンクを張ります。そして {{ic|/usr/bin/nsvlog}} スクリプトを使ってログを記録します。 == runit を使う == === ツール === * {{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}} == ユーザーレベルサービス == 特定のユーザーで runsvdir を実行することで監視ツリーを拡張してユーザーに制御を渡すことができます。 === ユーザーレベルサービスツリーを追加 === {{bc|# mkdir -p /etc/sv/homes/joeuser}} 以下の内容で {{ic|/etc/sv/homes/joeuser/run}} を作成してください: #!/bin/sh export PATH=/home/joeuser/bin:$PATH # optional, if your services rely on binaries in ~/bin exec 2>&1 \ sudo -H -u joeuser runsvdir -P /home/joeuser/service 'log:...................................................................................................................................' # Requires sudo, of course {{bc|# chmod 700 /etc/sv/homes/joeuser/run}} それから {{ic|/etc/sv/homes/joeuser}} から {{ic|/service}} にシンボリックリンクを作成すると、{{ic|~/service}} に配置されたサービスがユーザーの環境で起動するようになります。 === ユーザーの X セッションサービスを作成 === {{bc|# mkdir -p /etc/sv/joeuserX}} 以下の内容で {{ic|/etc/sv/joeuserX/run}} スクリプトを作成: #!/bin/sh exec 2>&1 \ su -c xinit - joeuser {{bc|# chmod 700 /etc/sv/joeuserX/run}} {{ic|/etc/sv/joeuserX}} から {{ic|/service}} にシンボリックリンクを作成してください。joe の X セッションは常には動作しなくなります。joe の ssh のパスフレーズを使って防護するには、{{ic|.xinitrc}} に以下を記述してください: #!/bin/sh ... SNIP ... xscreensaver& eval $(keychain --eval) exec sh -c \ 'SSH_ASKPASS=/usr/lib/openssh/ssh-askpass-fullscreen ssh-add < /dev/null \ && exec stumpwm' {{ic|stumpwm}} は使用したいウィンドウマネージャやデスクトップ環境のコマンドに置き換えてください。 {{Pkg|keychain}} と {{AUR|ssh-askpass-fullscreen}} パッケージが必要です。 == Tips and tricks == === メモリ上で PostgreSQL の読み取り専用スレーブデータベースを実行 === 以下のレシピは非常に高速な読み取り速度を必要とするデータベースのためのものです。PostgreSQL のストリーミングレプリケーションとホットスタンバイモードを使っています。 ==== 要件 ==== * [[PostgreSQL]] 9.0 以上 * {{AUR|arch-runit-services}} * [[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のソースを表示
話題を追加