RC
Section: Maintenance Commands (8)
索引
jman
BSD mandoc
索引
名称
rc
- 自動リブート処理とデーモン起動のためのコマンドスクリプト
索引
書式
rc.conf
rc.conf.local
rc.d/
rc.firewall
rc.local
rc.shutdown
rc.subr
索引
解説
ユーティリティは、
自動ブート処理を制御するコマンドスクリプトで、
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.conf5
を参照してください。
rc.d/
ディレクトリは、ブート時およびシャットダウン時に
自動的に実行されるスクリプトを保持します。
の動作
-
/etc/rc.subr
をソースし、様々な
rc.subr8
シェル関数を使えるようにロードします。
-
自動ブート時には、
autoboot = yes
を設定し、フラグ
(rc_fast = yes
)
を有効にすることで
rc.d/
スクリプトが既に動作中のプロセスのチェックをしないようにします
(これによりブート処理を高速化します)。
この
rc_fast = yes
による高速化は、シングルユーザシェルから抜けた後で
が起動されるときには使用されません。
-
rcorder(8)
を起動し、
/etc/rc.d/
中のファイルで
``nostart
''
キーワード
(rcorder8
の
-s
フラグを参照) を持たないものを並び換え、結果をある変数に代入します。
-
(rc.subr8
の)
Fn run_rc_script
を使用し、各スクリプトを順番に呼び出します。
この関数は
$1
を
``start
''
に設定し、サブシェルにてスクリプトをソースします。
スクリプトに
.sh
サフィックスがある場合、スクリプトは現在のシェルに直接ソースされます。
rc.shutdown の動作
-
/etc/rc.subr
をソースし、様々な
rc.subr8
シェル関数を使えるようにロードします。
-
rcorder(8)
を起動し、
/etc/rc.d/
中のファイルで
``shutdown
''
キーワード
(rcorder8
の
-k
フラグを参照) を持つものを逆順に並び換え、結果をある変数に代入します。
-
(rc.subr8
の)
Fn 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
''
のキーワードを含むべきです。
各スクリプトは少なくとも下記の引数を扱えることを期待されます。
これらは、
Fn run_rc_command
関数を使用する場合には自動的にサポートされます:
- start
-
サービスを開始します。
サービスが開始するよう
rc.conf5
で指定されるか確認すべきです。
また、サービスが既に実行中かどうか確認し、
その場合にはサービス開始を拒否すべきです。
システムが直接マルチユーザモードを起動する場合、ブート処理を高速するために、
標準の
Fx スクリプトは、後者の確認を行いません。
forcestart
が指定された場合、
rc.conf5
のチェックは無視し、強制的に開始します。
- stop
-
rc.conf5
でサービス開始が指定されている場合、サービスを停止します。
サービスが実際に動作していることを確認し、
そうでない場合には文句を言うべきです。
forcestop
が指定された場合、
rc.conf5
のチェックは無視し、停止を試みます。
- restart
-
stop
を実行し、
start
を実行します。
- status
-
スクリプトが (1 度限りの動作ではなく) プロセスを起動する場合、
プロセスの状態を表示します。
そうでない場合、この引数をサポートする必要はありません。
デフォルトは、(実行中のものがあれば) プログラムのプロセス ID を表示します。
- poll
-
スクリプトが (1 度限りの動作ではなく) プロセスを起動する場合、
コマンドの終了を待ちます。
そうでない場合、この引数をサポートする必要はありません。
- rcvar
-
サービスの起動にどの
rc.conf5
変数が使用されたかを表示します (もしあれば)。
スクリプトが追加コマンドを実装する必要がある場合、
extra_commands
変数にそれらを列挙し、
コマンド名からなる変数にその動作を定義可能です
Sx ( 使用例
節を参照してください)。
/usr/local/etc/rc.d/
ディレクトリ内の古いスクリプトには、次の重要事項が適用されます:
-
スクリプトは、
basename(1)
がシェルグロブパターン
*.sh
にマッチし、実行可能である場合のみ、実行されます。
このディレクトリ中の他のファイルやディレクトリは、黙って無視されます。
-
ブート時にスクリプトを実行するとき、文字列
``start
''
が、最初かつ唯一の引数として渡されます。
シャットダウン時には、文字列
``stop
''
が、最初かつ唯一の引数として渡されます。
すべての
rc.d/
スクリプトは、これら引数を適切に扱えるものであると期待されます。
指定時に動作不要の場合
(ブート時にもシャットダウン時にも)、
スクリプトは成功裏に終了し、エラーメッセージを出力してはなりません。
-
各ディレクトリ内のスクリプトは、辞書順に処理されます。
特定の順序が必要な場合には、
既存のファイル名の前に番号を付けると良いかもしれません。
例えば、
100.foo
は
200.bar
の前に実行されますが、番号を前に付けないと逆の順番になります。
-
典型的な各スクリプトの出力は、1 個の空白文字の後に、
起動または終了されたソフトウェアパッケージ名が続き、
最後には改行文字は
付きません
Sx 使用例
の節を見てください)。
索引
興味深いスクリプト
自動リブート処理の進行中、
は
autoboot
を引数として起動されます。
/etc/rc.d/
から起動されるスクリプトのひとつが
/etc/rc.d/fsck
です。
このスクリプトは
fsck(8)
を
-p
および
-F
オプション付きで実行し、
前回のシステムシャットダウンによる些細なディスク不整合を全て
``修繕''
し、
ハードウェアあるいはソフトウェアの障害から生じた
重大なディスク不整合を調べます。
これが失敗すると、
ハードウェアもしくはソフトウェアの失敗により発生した重大な矛盾の確認/修復は、
ブート処理の最後にバックグラウンドで実行されます。
autoboot
が設定されていない場合、
例えばシングルユーザモードからマルチユーザモードへ以降するとき、
このスクリプトは何もしません。
rc.early
スクリプトは、起動処理の非常に早い段階、
すなわちファイルシステムチェックの直前に実行されます。
rc.early
スクリプトは価値が低下しています。
このファイルの中のコマンドは、
rc.d/
スタイルスクリプトへ分割し、
システムに組み込むべきです。
/etc/rc.d/local
スクリプトは複数の
rc.d/
ディレクトリ中のスクリプトを実行可能です。
デフォルト位置は
/usr/local/etc/rc.d/
と
/usr/X11R6/etc/rc.d/
ですが、
local_startup
rc.conf5
変数で上書き可能です。
/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
ディレクトリに置かれます。
索引
使用例
以下は最小の
rc.d/
スタイルスクリプトです。
ほとんどのスクリプトではこれになんらかの追加が必要でしょう。
#!/bin/sh
#
# PROVIDE: foo
# REQUIRE: bar_service_required_to_precede_foo
# BEFORE: baz_service_requiring_foo_to_precede_it
. /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
. /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
-
プロセスの開始直後に
dmesg(1)
が結果を書き込みます。
カーネル内の dmesg バッファがもはやこの情報を保持していない場合に有用です。
索引
関連項目
kill(1),
rc.conf5,
init(8),
rcorder(8),
rc.subr8,
reboot(8),
savecore(8)
索引
歴史
スクリプトは
BSD 4.0
で登場しました。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- Nm No の動作
-
- Nm rc.shutdown の動作
-
- Nm rc.d/ の内容
-
- 興味深いスクリプト
-
- 使用例
-
- 関連ファイル
-
- 関連項目
-
- 歴史
-
Time: 07:07:43 GMT, January 12, 2009