日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
RC(8) FreeBSD システム管理者マニュアル RC(8)
名称
rc - 自動リブート処理とデーモン起動のためのコマンドスクリプト
書式
rc
rc.conf
rc.conf.local
rc.d/
rc.firewall
rc.local
rc.shutdown
rc.subr
解説
rc ユーティリティは、自動ブート処理を制御するコマンドスクリプトで、
init(8) に呼ばれます。 rc.local は特定サイトに特化したコマンドを記述する
スクリプトです。今日では、典型的には /usr/local/etc/rc.d/ の機構が
rc.local の代りに使用されます。しかしながら、 rc.local を使用したいのであ
ればこれはまだサポートされています。この場合、 rc.local が /etc/rc.conf
を読み取るようにしてから、あなたのシステム特有の更なるカスタムスタート
アップコードを rc.local に追加してください。 rc.local を扱う最良の方法
は、これを rc.d/ スタイルのスクリプトとして分割して、これらを
/usr/local/etc/rc.d/ に置くことです。 rc.conf ファイルはスタートアップス
クリプト群から参照されるグローバルなシステム構成情報を持ち、
rc.conf.local はローカルなシステム構成情報を持ちます。更なる情報について
は rc.conf(5) を参照してください。
rc.d/ ディレクトリは、ブート時およびシャットダウン時に自動的に実行される
スクリプトを保持します。
rc の動作
1. /etc/rc.subr をソースし、様々な rc.subr(8) シェル関数を使えるように
ロードします。
2. 自動ブート時には、 autoboot=yes を設定し、フラグ (rc_fast=yes) を有
効にすることで rc.d/ スクリプトが既に動作中のプロセスのチェックをし
ないようにします (これによりブート処理を高速化します)。この
rc_fast=yes による高速化は、シングルユーザシェルから抜けた後で rc が
起動されるときには使用されません。
3. rcorder(8) を起動し、 /etc/rc.d/ 中のファイルで ``nostart'' キーワー
ド (rcorder(8) の -s フラグを参照) を持たないものを並び換え、結果を
ある変数に代入します。
4. (rc.subr(8) の) run_rc_script() を使用し、各スクリプトを順番に呼び出
します。この関数は $1 を ``start'' に設定し、サブシェルにてスクリプ
トをソースします。スクリプトに .sh サフィックスがある場合、スクリプ
トは現在のシェルに直接ソースされます。
rc.shutdown の動作
1. /etc/rc.subr をソースし、様々な rc.subr(8) シェル関数を使えるように
ロードします。
2. rcorder(8) を起動し、 /etc/rc.d/ 中のファイルで ``shutdown'' キー
ワード (rcorder(8) の -k フラグを参照) を持つものを逆順に並び換え、
結果をある変数に代入します。
3. (rc.subr(8) の) run_rc_script() を使用し、各スクリプトを順番に呼び出
します。この関数は $1 を ``stop'' に設定し、サブシェルにてスクリプト
をソースします。スクリプトに .sh サフィックスがある場合、スクリプト
は現在のシェルに直接ソースされます。
rc.d/ の内容
rc.d/ は /etc/rc.d/ にあります。次のファイル命名規則が現在 rc.d/ で使用さ
れています:
ALLUPPERCASE ``プレースホルダ'' スクリプトであり、ある動作が他の動
作の前に実行されることを保証します。起動での順番では
次のものがあります:
NETWORKING 基本的なネットワークサービスが起動するこ
とを保証します。一般的なネットワーク設定
(network1, network2, network3) が含まれま
す。
SERVERS 基本的なサービス (NETWORKING, ppp-user,
syslogd, isdnd 等) が起動することを保証し
ます。これらは、早期に開始する (named な
どの) サービスのために存在します。これら
は後述の DAEMON に要求されています。
DAEMON lpd や ntpd といったすべての汎用デーモン
の前のチェックポイントです。
LOGIN ユーザログインサービス (inetd や sshd) お
よびユーザとしてコマンドを実行しうるサー
ビス (cron や sendmail) の前のチェックポ
イントです。
foo.sh サブシェルではなく現在のシェルにソースされるスクリプ
トは .sh サフィックスを持ちます。この使用には非常に注
意してください。スクリプトが停止してしまうと、起動
シーケンスも停止してしまいますので。
bar サブシェル内でソースされるスクリプト。これらのスクリ
プトは必要ならば次のシェルコマンドで、ブートを停止で
きます:
if [ "$autoboot" = yes ]; then
kill -TERM $$
fi
exit 1
これを使用することはかなり控えてください!
各スクリプトは rcorder(8) キーワード、特に適切な ``PROVIDE'' エントリと必
要に応じた ``REQUIRE'' および ``BEFORE'' のキーワードを含むべきです。さら
に、すべてのスクリプトは ``# KEYWORD: FreeBSD'' 行を持つ必要があります。
各スクリプトは少なくとも下記の引数を扱えることを期待されます。これらは、
run_rc_command() 関数を使用する場合には自動的にサポートされます:
start サービスを開始します。サービスが開始するよう rc.conf(5) で
指定されるか確認すべきです。また、サービスが既に実行中かど
うか確認し、その場合にはサービス開始を拒否すべきです。シス
テムが直接マルチユーザモードを起動する場合、ブート処理を高
速するために、標準の FreeBSD スクリプトは、後者の確認を行
いません。 forcestart が指定された場合、 rc.conf(5) の
チェックは無視し、強制的に開始します。
stop rc.conf(5) でサービス開始が指定されている場合、サービスを
停止します。サービスが実際に動作していることを確認し、そう
でない場合には文句を言うべきです。 forcestop が指定された
場合、 rc.conf(5) のチェックは無視し、停止を試みます。
restart stop を実行し、 start を実行します。
status スクリプトが (1 度限りの動作ではなく) プロセスを起動する場
合、プロセスの状態を表示します。そうでない場合、この引数を
サポートする必要はありません。デフォルトは、(実行中のもの
があれば) プログラムのプロセス ID を表示します。
poll スクリプトが (1 度限りの動作ではなく) プロセスを起動する場
合、コマンドの終了を待ちます。そうでない場合、この引数をサ
ポートする必要はありません。
rcvar サービスの起動にどの rc.conf(5) 変数が使用されたかを表示し
ます (もしあれば)。
スクリプトが追加コマンドを実装する必要がある場合、 extra_commands 変数に
それらを列挙し、コマンド名からなる変数にその動作を定義可能です (使用例節
を参照してください)。
/usr/local/etc/rc.d/ ディレクトリ内の古いスクリプトには、次の重要事項が適
用されます:
+o スクリプトは、 basename(1) がシェルグロブパターン *.sh にマッチし、実
行可能である場合のみ、実行されます。このディレクトリ中の他のファイル
やディレクトリは、黙って無視されます。
+o ブート時にスクリプトを実行するとき、文字列 ``start'' が、最初かつ唯一
の引数として渡されます。シャットダウン時には、文字列 ``stop'' が、最
初かつ唯一の引数として渡されます。すべての rc.d/ スクリプトは、これら
引数を適切に扱えるものであると期待されます。指定時に動作不要の場合 (
ブート時にもシャットダウン時にも)、スクリプトは成功裏に終了し、エラー
メッセージを出力してはなりません。
+o 各ディレクトリ内のスクリプトは、辞書順に処理されます。特定の順序が必
要な場合には、既存のファイル名の前に番号を付けると良いかもしれませ
ん。例えば、 100.foo は 200.bar の前に実行されますが、番号を前に付け
ないと逆の順番になります。
+o 典型的な各スクリプトの出力は、1 個の空白文字の後に、起動または終了さ
れたソフトウェアパッケージ名が続き、最後には改行文字は 付きません (
使用例の節を見てください)。
興味深いスクリプト
自動リブート処理の進行中、 rc は autoboot を引数として起動されます。
/etc/rc.d/ から起動されるスクリプトのひとつが /etc/rc.d/fsck です。このス
クリプトは fsck(8) を -p および -F オプション付きで実行し、前回のシステム
シャットダウンによる些細なディスク不整合を全て ``修繕'' し、ハードウェア
あるいはソフトウェアの障害から生じた重大なディスク不整合を調べます。これ
が失敗すると、ハードウェアもしくはソフトウェアの失敗により発生した重大な
矛盾の確認/修復は、ブート処理の最後にバックグラウンドで実行されます。
autoboot が設定されていない場合、例えばシングルユーザモードからマルチユー
ザモードへ以降するとき、このスクリプトは何もしません。
rc.early スクリプトは、起動処理の非常に早い段階、すなわちファイルシステム
チェックの直前に実行されます。 rc.early スクリプトは価値が低下していま
す。このファイルの中のコマンドは、 rc.d/ スタイルスクリプトへ分割し、 rc
システムに組み込むべきです。
/etc/rc.d/local スクリプトは複数の rc.d/ ディレクトリ中のスクリプトを実行
可能です。デフォルト位置は /usr/local/etc/rc.d/ と /usr/X11R6/etc/rc.d/
ですが、 local_startup rc.conf(5) 変数で上書き可能です。
/etc/rc.d/serial スクリプトは、シリアルデバイスの特殊な構成があればそれを
設定するために使用します。
/etc/rc.d/pccard スクリプトは、PC カードを有効にするために使用します。
/etc/rc.d/network* スクリプトは、ネットワークを起動するために使用します。
ネットワークの起動は複数パスで行われます。最初のパス /etc/rc.d/network1
は、ホスト名とドメイン名を設定し、ネットワークインタフェースを構成しま
す。 /etc/rc.d/network2 スクリプトは、ルーティング開始し、ルーティングオ
プションを設定します。 /etc/rc.d/network3 スクリプトは、追加のネットワー
クオプションを設定します。最後に /etc/rc.d/network_ipv6 スクリプト
は、IPv6 インタフェースとオプションを設定します。
rc.firewall スクリプトは、カーネルベースのファイアウォールサービスの規則
の設定に使用されます。
open 全入力を許可します。
client このマシンのみを保護しようとします。
simple 全ネットワークを保護しようとします。
closed lo0 以外の全 IP サービスを無効にします。
UNKNOWN ファイアウォール規則のロードを無効にします。
filename 指定したファイル名の規則をロードします (フルパス指定が必
要)。
/etc/rc.d/atm* スクリプトは、ATM ネットワークインタフェースを設定するため
に使用されます。インタフェースは 3 つのパスで設定されます。第 1 のパスで
は、インタフェースの初期設定をおこないます。第 2 のパスでは、インタフェー
スの設定が終り、 PVC および永続的な ATMARP エントリを定義します。第 3 の
パスでは、任意の ATM デーモンを起動します。
ネットワーク関連デーモンを含むほとんどのデーモンは、起動・停止・サービス
の状態確認のために使用可能な自身のスクリプトを /etc/rc.d/ に持ちます。
例えば /etc/rc.d/apm 等のアーキテクチャ固有スクリプトは、デーモンの起動前
に、特に該当アーキテクチャ上であるのかを確認します。
伝統に従い、すべてのスタートアップファイルは /etc ディレクトリに置かれま
す。
使用例
以下は最小の rc.d/ スタイルスクリプトです。ほとんどのスクリプトではこれに
なんらかの追加が必要でしょう。
#!/bin/sh
#
# PROVIDE: foo
# REQUIRE: bar_service_required_to_precede_foo
# BEFORE: baz_service_requiring_foo_to_precede_it
# KEYWORD: FreeBSD
. /etc/rc.subr
name="foo"
rcvar=`set_rcvar`
command="/usr/local/bin/foo"
load_rc_config $name
run_rc_command "$1"
スクリプトによっては追加機能を提供したいでしょう。追加コマンドを介するこ
とで、この機能にアクセス可能です。スクリプトは、コマンドを必要なだけ列挙
し定義可能です。
#!/bin/sh
#
# PROVIDE: foo
# REQUIRE: bar_service_required_to_precede_foo
# BEFORE: baz_service_requiring_foo_to_precede_it
# KEYWORD: FreeBSD
. /etc/rc.subr
name="foo"
rcvar=`set_rcvar`
command="/usr/local/bin/foo"
extra_commands="nop hello"
hello_cmd="echo Hello World."
nop_cmd="do_nop"
do_nop()
{
echo "I do nothing."
}
load_rc_config $name
run_rc_command "$1"
ブート時にデーモンを起動し、シャットダウン時にこれを終了する、古いスタイ
ルの /usr/local/etc/rc.d/ スクリプトの仮想的な例を示します。
#!/bin/sh -
#
# foobar パッケージの初期化/シャットダウンスクリプト
case "$1" in
start)
/usr/local/sbin/foo -d && echo -n ' foo'
;;
stop)
kill `cat /var/run/foo.pid` && echo -n ' foo'
;;
*)
echo "unknown option: $1 - should be 'start' or 'stop'" >&2
;;
esac
シャットダウン時には init(8) が全プロセスを終了させるので、明示的な
kill(1) は不要ですが、これが含まれることが多いです。
関連ファイル
/etc/rc
/etc/rc.conf
/etc/rc.conf.local
/etc/rc.d/
/etc/rc.firewall
/etc/rc.local
/etc/rc.shutdown
/etc/rc.subr
関連項目
kill(1), rc.conf(5), init(8), rc.subr(8), rcorder(8), reboot(8),
savecore(8)
歴史
rc スクリプトは 4.0BSD で登場しました。
4th Berkeley Distribution December 11, 1993 4th Berkeley Distribution