RC(8)

名称
rc - 自動リブート処理とデーモン起動のためのコマンドスクリプト

書式
rc rc.conf rc.conf.local rc.early rc.d rc.serial rc.pccard rc.network rc.firewall rc.atm rc.<arch> rc.local rc.shutdown

解説
rc ユーティリティは、 自動リブート処理を制御するコマンドスクリプト (他のスクリプトを呼びます) で、 rc.local は特定サイトに特化したコマンドを記述するスクリプトです。 今日では、 典型的には /usr/local/etc/rc.d の機構が rc.local の代りに使用されます。 しかしながら、 rc.local を使用したいのであれば /etc/rc は未だこれをサポートしています。 この場合、rc.local が /etc/rc.conf を読み取るようにしてから、 あなたのシステム特有の更なるカスタムスタートアップコードを rc.local に追加してください。 rc.conf ファイルは rc ファイル群から参照されるグローバルなシステム構成情報を持ち、 rc.conf.local はローカルなシステム構成情報を持ちます。 rc.conf(5) を参照してください。

rc.d ディレクトリは、ブート時およびシャットダウン時に 自動的に実行されるスクリプトを保持します。 ブート時には、指定されたディレクトリは、 rc.local の実行直後に処理されます (処理対象ディレクトリの指定方法の詳細は後述します)。 シャットダウン時には、ディレクトリは rc.shutdown が処理します。 各ディレクトリ内のスクリプトには、次の重要事項が適用されます:

•   スクリプトは、 basename(1) がシェルグロブパターン *.sh にマッチし、実行可能である場合のみ、実行されます。 このディレクトリ中の他のファイルやディレクトリは、黙って無視されます。
•   ブート時にスクリプトを実行するとき、文字列 “start” が、最初かつ唯一の引数として渡されます。 シャットダウン時には、文字列 “stop” が、最初かつ唯一の引数として渡されます。 すべての rc.d スクリプトは、これら引数を適切に扱えるものであると期待されます。 指定時に動作不要の場合 (ブート時にもシャットダウン時にも)、 スクリプトは成功裏に終了し、エラーメッセージを出力してはなりません。
•   各ディレクトリ内のスクリプトは、辞書順に処理されます。 特定の順序が必要な場合には、 既存のファイル名の前に番号を付けると良いかもしれません。 例えば、 100.foo は 200.bar の前に実行されますが、番号を前に付けないと逆の順番になります。

典型的な各スクリプトの出力は、1 個の空白文字の後に、 起動または終了されたソフトウェアパッケージ名が続き、 最後には改行文字は 付きません ( 使用例 の節を見てください)。

複数の rc.d ディレクトリから、システム起動スクリプトを実行可能です。 デフォルトの位置は /usr/local/etc/rc.d と /usr/X11R6/etc/rc.d ですが、 local_startup rc.conf(5) 変数で変更可能です。

rc.shutdown は、システムシャットダウンにおいて実行されることが必要なコマンドを持つ スクリプトです。

自動リブート処理の進行中、 rc は autoboot を引数として起動されます。 rc はその最初の部分で fsck(8) を -p オプション付きで実行し、 前回のシステムシャットダウンによる些細なディスク不整合を全て「修繕」し、 ハードウェアあるいはソフトウェアの障害から生じた 重大なディスク不整合を調べます。 この自動チェックと修繕がうまくいくと、 rc の第二部が開始します。

rc の第二部は 自動リブート処理が成功した後および シングルユーザモードのシェルが終了して rc が起動された場合( init(8) 参照)に実行されます。 この第二部はシステムの全てのデーモンを起動し、 エディタファイルを保存し、 一時ディレクトリ /tmp をクリアします。

rc.early スクリプトは、起動処理の非常に早い段階、 すなわちファイルシステムチェックの直前に実行されます。

rc.serial スクリプトは、 シリアルデバイスの特殊な構成があればそれを設定するために使用します。

rc.pccard スクリプトは、PC カードを有効にするために使用します。

rc.network スクリプトは、ネットワークを起動するために使用します。 ネットワークの起動は 3 パスで行われます。 最初のパスは、ホスト名とドメイン名を設定し、 ネットワークインタフェースを構成し、 IP ファイアウォール規則があれば有効にし、ルーティングを有効にします。 第 2 パスは、ほとんどのネットワーク関連デーモンの起動を行います。 第 3 パスは、NFS, amd, rwhod, Kerberos, マルチキャストルーティングデーモンの 起動を行います。

rc.firewall スクリプトは、 カーネルベースのファイアウォールサービスの規則の設定に使用されます。

open
    全入力を許可します。
client
    このマシンのみを保護しようとします。
simple
    全ネットワークを保護しようとします。
closed
    lo0 以外の全 IP サービスを無効にします。
UNKNOWN
    ファイアウォール規則のロードを無効にします。
filename
    指定したファイル名の規則をロードします (フルパス指定が必要)。

rc.atm スクリプトは、ATM ネットワークインタフェースを設定するために使用されます。 インタフェースは 3 つのパスで設定されます。 第 1 のパスでは、インタフェースの初期設定をおこないます。 第 2 のパスでは、インタフェースの設定が終り、 PVC および永続的な ATMARP エントリを定義します。 第 3 のパスでは、任意の ATM デーモンを起動します。

rc.<arch> スクリプトは、アーキテクチャ依存のプログラムを起動します。

rc.local スクリプトが起動されるのは、上記スクリプトの後ですが、残りの rc ファイルが完了する前です。 デフォルトインストールでは、 rc.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) は不要ですが、これが含まれることが多いです。

関連項目
kill(1), rc.conf(5), init(8), reboot(8), savecore(8)

歴史
rc スクリプトは 4.0BSD で登場しました。