総合手引 | セクション 8 | English | オプション |
rc.d/
ディレクトリは、ブート時およびシャットダウン時に
自動的に実行されるスクリプトを保持します。
No
rc.shutdown
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" のキーワードを含むべきです。
各スクリプトは少なくとも下記の引数を扱えることを期待されます。 これらは、 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/ ディレクトリ内の古いスクリプトには、次の重要事項が適用されます:
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/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 ディレクトリに置かれます。
#!/bin/sh ## PROVIDE: foo # REQUIRE: bar_service_required_to_precede_foo # BEFORE: baz_service_requiring_foo_to_precede_it
amp;. /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
amp;. /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 /var/run/dmesg.boot | |
rc プロセスの開始直後に dmesg(1) が結果を書き込みます。 カーネル内の dmesg バッファがもはやこの情報を保持していない場合に有用です。 | |
RC (8) | November 4, 2002 |
総合手引 | セクション 8 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | The most horrifying thing about Unix is that, no matter how many times you hit yourself over the head with it, you never quite manage to lose consciousness. It just goes on and on. | ” |
— Patrick Sobalvarro |