Initial Translation for rc.subr.8.

Submitted by: Watanabe Kazuhiro <CQG00620 at nifty ne jp>
Reviewed by: Nobuyuki Koganemaru <n-kogane at syd odn ne jp>
This commit is contained in:
SUZUKI Koichi 2005-07-11 13:33:50 +00:00
parent eddc7bb959
commit 2a707c99e3
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=25071
2 changed files with 784 additions and 0 deletions

View file

@ -220,6 +220,7 @@ MAN8 = IPXrouted.8\
rbootd.8\
rc.8\
rc.sendmail.8\
rc.subr.8\
rcorder.8\
reboot.8\
renice.8\

View file

@ -0,0 +1,783 @@
.\" %NetBSD: rc.subr.8,v 1.12 2004/01/06 00:52:24 lukem Exp %
.\"
.\" Copyright (c) 2002-2004 The NetBSD Foundation, Inc.
.\" All rights reserved.
.\"
.\" This code is derived from software contributed to The NetBSD Foundation
.\" by Luke Mewburn.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the NetBSD
.\" Foundation, Inc. and its contributors.
.\" 4. Neither the name of The NetBSD Foundation nor the names of its
.\" contributors may be used to endorse or promote products derived
.\" from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man8/rc.subr.8,v 1.6 2004/07/09 10:08:03 ru Exp %
.\"
.\" $FreeBSD$
.Dd January 6, 2004
.Dt RC.SUBR 8
.Os
.Sh 名称
.Nm rc.subr
.Nd システムシェルスクリプトで使用する関数群
.Sh 書式
.Bl -item -compact
.It
.Ic .\& Pa /etc/rc.subr
.Pp
.It
.Ic backup_file Ar action Ar file Ar current Ar backup
.It
.Ic checkyesno Ar var
.It
.Ic check_pidfile Ar pidfile Ar procname Op Ar interpreter
.It
.Ic check_process Ar procname Op Ar interpreter
.It
.Ic debug Ar message
.It
.Ic err Ar exitval Ar message
.It
.Ic force_depend Ar name
.It
.Ic info Ar message
.It
.Ic load_rc_config Ar command
.It
.Ic mount_critical_filesystems Ar type
.It
.Ic rc_usage Ar command ...
.It
.Ic reverse_list Ar item ...
.It
.Ic run_rc_command Ar argument
.It
.Ic run_rc_script Ar file Ar argument
.It
.Ic set_rcvar Op Ar base
.It
.Ic wait_for_pids Op Ar pid ...
.It
.Ic warn Ar message
.El
.Sh 解説
.Nm
スクリプトは、
.Xr rc 8
のような様々なスクリプトから利用される、一般的に使用する
シェルスクリプト関数や変数定義を含んでいます。
また ports が要求する
.Pa /usr/local/etc/rc.d
内のスクリプトも、やがては本スクリプトを使用するように
書き換えられるでしょう。
.Pp
.Nm
の関数群は、大部分が
.Nx
から取り込まれたものであり、またそれらは二つのプロジェクト間で同期できるように
考えられています。
そのことを考慮した、役に立ついくつかの変数定義があります:
.Bl -tag -width 4n
.It Va OSTYPE
この値は
.Qq Li FreeBSD
.Qq Li NetBSD
のどちらかで、実行されている OS によります。
.It Va SYSCTL
.Xr sysctl 8
コマンドのパス。
.It Va SYSCTL_N
.Ar name Ns = Ns Ar value
ペアとしてではなく、
.Xr sysctl 8
変数のみを表示する際の、パスと引数のリスト。
.It Va SYSCTL_W
.Xr sysctl 8
変数を設定または変更する際の、パスと引数。
.El
.Pp
.Nm
関数群には、カレントシェルで
.Pa /etc/rc.subr
を読み込む事でアクセスできます。
.Pp
以下のシェル関数が利用可能です:
.Bl -tag -width 4n
.It Ic backup_file Ar action file current backup
.Ar file
のバックアップコピーを
.Ar current
として作成します。
.Xr rc.conf 5
変数の
.Va backup_uses_rcs
.Dq Li YES
である場合、以前のバージョンの
.Ar current
.Xr rcs 1
を使ってアーカイブします。
そうでなければ、以前のバージョンの
.Ar current
.Ar backup
として保存します。
.Pp
引数
.Ar action
は次のうちのどれかです:
.Bl -tag -width ".Cm remove"
.It Cm add
.Ar file
はこのバックアップ機構によりすぐにバックアップされるか、もしくは再投入されます。
.Ar current
が作成され、必要なら、
.Xr rcs 1
ファイルが同様に作成されます。
.It Cm update
.Ar file
は変更されており、バックアップを取る必要があります。
.Ar current
が存在するなら、
.Ar backup
にコピーされるか、もしくは
.Xr rcs 1
にチェックされます (リポジトリファイルが古い場合)。
その後に、
.Ar file
.Ar current
にコピーされます。
.It Cm remove
.Ar file
はこのバックアップ機構で管理される事はもうありません。
.Xr rcs 1
が使われている場合は、空のファイルがチェックインされて
.Ar current
は削除されます。
そうでなければ、
.Ar current
.Ar backup
に移動します。
.El
.It Ic checkyesno Ar var
.Ar var
の値が
.Dq Li YES ,
.Dq Li TRUE ,
.Dq Li ON ,
.Ql 1
ならば、 0 を返します。
.Ar var
の値が
.Dq Li NO ,
.Dq Li FALSE ,
.Dq Li OFF ,
.Ql 0
ならば、 1 を返します。
これら以外の値ならば、
.Ar var
が正しく設定されていないという警告を出します。
値は大文字 / 小文字を問いません。
.It Ic check_pidfile Ar pidfile procname Op Ar interpreter
.Ar pidfile
の最初の行の最初の語を解析して PID とし、この PID を持つプロセスが
実行されていて、最初の引数が
.Ar procname
とマッチすることを確かめます。
成功すればマッチした PID を出力し、そうでなければ何もしません。
.Ar interpreter
が与えられれば、
.Ar procname
の最初の行を解析して、
.Pp
.Dl "#! interpreter [...]"
.Pp
という形式であることを確かめます。
そして
.Ar interpreter
とオプション引数に
.Ar procname
を追加したものを、検索するプロセス文字列として使用します。
.It Ic check_process Ar procname Op Ar interpreter
最初の引数が
.Ar procname
にマッチする、実行されている任意のプロセスの PID を出力します。
.Ar interpreter
.Ic check_pidfile
と同様に扱われます。
.It Ic debug Ar message
デバッグメッセージを
.Va stderr
に表示し、
.Xr logger 1
を使用してシステムログに記録をして、呼び出し元に戻ります。
このエラーメッセージは、スクリプト名
.Va ( $0
より),
.Dq Li ": DEBUG: " ,
及びこれに続く
.Ar message
で構成されます。
この関数はスクリプトのデバッグの手助けとして、開発者が使用することを
目的にしています。
これは
.Xr rc.conf 5
変数の
.Va rc_debug
により、有効あるいは無効にすることができます。
.It Ic err Ar exitval message
エラーメッセージを
.Va stderr
に表示し、
.Xr logger 1
を使用してシステムログに記録をして、終了値
.Ar exitval
.Ic 終了します。
このエラーメッセージは、スクリプト名
.Va ( $0
より),
.Dq Li ": ERROR: " ,
及びこれに続く
.Ar message
で構成されます。
.It Ic force_depend name
勧告メッセージを出力し、
.Ar name
サービスを強制的に起動します。
引数
.Ar name
は、通常
.Pa /etc/rc.d/name
といったスクリプトのパスの
.Xr basename 1
要素です。
スクリプトが何らかの原因で失敗した場合、警告を出力して戻り値 1 を返します。
成功した場合は、戻り値 0 を返します。
.It Ic info Ar message
情報メッセージを
.Va stdout
に表示し、
.Xr logger 1
を使用してシステムログに記録をします。
このメッセージは、スクリプト名
.Va ( $0
より),
.Dq Li ": INFO: " ,
及びこれに続く
.Ar message
で構成されます。
この情報出力の表示は
.Xr rc.conf 5
変数の
.Va rc_info
により、有効あるいは無効にすることができます。
.It Ic load_rc_config Ar command
.Ar command
の設定ファイルを読み込みます。
最初に、
.Pa /etc/rc.conf
がまだ読み込まれていなければ、読み込みます。
その後に、ファイル
.Pa /etc/rc.conf.d/ Ns Ar command
が存在すれば、これを読み込みます。
後者は呼び出しスクリプト側で指定した
.Ic run_rc_command
引数を上書きする変数定義を含めることもできます。
これは管理者が任意の
.Xr rc.d 8
スクリプトを編集すること無く、その動作を上書きできる簡易な仕組みを提供します。
.It Ic mount_critical_filesystems Ar type
.Xr rc.conf 5
変数の
.Va critical_filesystems_ Ns Ar type
で定義された重要なファイルシステムの一覧のうち、この時点でマウントされて
いないものがあれば、マウントします。
.It Ic rc_usage Ar command ...
.Va $0
の使用方法を、有効な引数の一覧として、
.Ar command
をプレフィックスの
.Sm off
.Dq Bq Li fast | force | one
.Sm on
と共に出力します。
.It Ic reverse_list Ar item ...
.Ar item
のリストを逆順で出力します。
.It Ic run_rc_command Ar argument
各種のシェル変数の設定に基づいて、現在の
.Xr rc.d 8
スクリプトの、
.Ar argument
処理を実行します。
.Ic run_rc_command
はきわめて柔軟性があり、完全に機能する
.Xr rc.d 8
スクリプトを小量のシェルコードで記述することができます。
.Pp
.Ar argument
はサポートされているコマンドから検索され、それは以下のうちのどれかです:
.Bl -tag -width ".Cm restart" -offset indent
.It Cm start
サービスを起動します。
本コマンドは、
.Xr rc.conf 5
の指定によりサービスを起動するべきかをチェックします。
またサービスが既に実行中で、そのために起動を拒否するかどうかもチェックします。
標準の
.Fx
スクリプトにおいて、システムが直接マルチユーザモードで起動する場合は、
起動プロセスの高速化のために、後者のチェックは行われません。
.It Cm stop
.Xr rc.conf 5
の指定によりサービスが起動していれば、サービスを停止します。
本コマンドはサービスが実行中かどうかをチェックし、そうでない場合、
その旨を表示します。
.It Cm restart
.Cm stop
の後に、
.Cm start
を実行します。
デフォルトでは、 (もし実行中なら) プログラムのプロセス ID を表示します。
.It Cm rcvar
サービスの起動を制御するのに使用する
.Xr rc.conf 5
変数を (もしあれば) 表示します。
.El
.Pp
.Va pidfile
または
.Va procname
が設定されていれば、以下もサポートされています:
.Bl -tag -width ".Cm restart" -offset indent
.It Cm poll
コマンドが終了するのを待ちます。
.It Cm status
プロセスのステータスを表示します。
.El
.Pp
他にサポートされているコマンドは、オプション変数の
.Va extra_commands
に列挙されています。
.Pp
.Ar argument
はそれ自身の動作を変更する、以下のプレフィックスをつけることができます:
.Bl -tag -width ".Li force" -offset indent
.It Li fast
実行中のプロセスの有無をチェックしません。
.Va rc_fast Ns = Ns Li YES
をセットします。
.It Li force
.Va rcvar
.Dq Li YES
にセットされているかどうかをチェックしません。
.Va rc_force Ns = Ns Li YES
をセットします。
.Ar argument Ns Va _precmd
が非 0 を返しても無視します。
.Va required_*
テストのどれかが失敗しても無視します。
また終了ステータスとして常に 0 を返します。
.It Li one
.Va rcvar
.Dq Li YES
にセットされているかどうかをチェックしません。
しかし他の全ての前提チェックは行います。
.El
.Pp
.Ic run_rc_command
はその動作を制御するために、以下のシェル変数を使用します。
特に明記が無いものは、オプションです。
.Bl -tag -width ".Va procname" -offset indent
.It Va name
このスクリプトの名称。
これはオプションではありません。
.It Va rcvar
.Va rcvar
の値は
.Ic checkyesno
によりチェックされ、この処理を実行するかどうかを判定します。
.It Va command
コマンドのフルパス。
サポートされる各キーワードに対して
.Ar argument Ns Va _cmd
が設定されている場合は、必要ありません。
.It Va command_args
オプション引数、及び / または
.Va command
に対するシェルディレクティブ。
.It Va command_interpreter
.Va command
.Pp
.Dl "#! command_interpreter [...]"
という形式で起動されるので、
.Xr ps 1
コマンドの出力は
.Pp
.Dl "command_interpreter [...] command"
.Pp
のようになります。
ですので、この文字列は実行中のコマンドの PID を検索するのに、
.Va command
の代わりに使用します。
.It Va extra_commands
特別にサポートするコマンド / キーワード / 引数。
.It Va pidfile
PID ファイルのパス。
実行中のコマンドの PID を特定するのに使用します。
.Va pidfile
が設定された場合、 PID を検索するのには
.Pp
.Dl "check_pidfile $pidfile $procname"
.Pp
を使用します。
そうでなければ、
.Va command
が設定されている場合、 PID を検索するのには
.Pp
.Dl "check_process $procname"
.Pp
を使用します。
.It Va procname
チェックする時のプロセス名。
デフォルトは
.Va command
の値です。
.It Va required_dirs
デフォルトの start 処理を実行する前に、これに列挙されたディレクトリの
存在をチェックします。
.It Va required_files
デフォルトの start 処理を実行する前に、これに列挙されたファイルが
読み取り可能かをチェックします。
.It Va required_vars
デフォルトの start 処理を実行する前に、これに列挙された変数に対して
.Ic checkyesno
を適用します。
.It Va ${name}_chdir
.Va ${name}_chroot
が提供されない場合、
.Va command
を実行する前に
.Ic cd
するディレクトリ。
.It Va ${name}_chroot
.Va command
を実行する前に
.Xr chroot 8
するディレクトリ。
.Pa /usr
がマウントされた後にのみサポートされています。
.It Va ${name}_flags
.Va command
の呼び出し時に適用する引数。
これは通常
.Xr rc.conf 5
で設定され、
.Xr rc.d 8
スクリプトで設定されるものではありません。
これを上書きするのに、環境変数の
.Sq Ev flags
を使うことができます。
.It Va ${name}_nice
.Va command
を実行する際の
.Xr nice 1
レベル。
.Pa /usr
がマウントされた後にのみサポートされています。
.It Va ${name}_user
.Va command
を実行する際のユーザ。
.Va ${name}_chroot
が設定されている場合は
.Xr chroot 8
を使用し、そうでなければ
.Xr su 1
を使用します。
.Pa /usr
がマウントされた後にのみサポートされています。
.It Va ${name}_group
chroot 後に
.Va command
を実行する際のグループ。
.It Va ${name}_groups
コンマで区切られたリストで、 chroot 後に
.Va command
を実行する際の補助グループ。
.It Ar argument Ns Va _cmd
.Ar argument
のデフォルト処理を上書きするシェルコマンド。
.It Ar argument Ns Va _precmd
.Ar argument Ns Va _cmd
を実行する直前、もしくは
.Ar argument
のデフォルト処理の直前に実行するシェルコマンド。
もしこれが非 0 の終了コードを返した場合、メイン処理は行われません。
デフォルト処理が実行されるならば、このチェックは
.Va required_*
チェックとプロセスの (非) 存在チェックの後に行われます。
.It Ar argument Ns Va _postcmd
実行された
.Ar argument Ns Va _cmd
、もしくは
.Ar argument
のデフォルト処理が終了コード 0 を返した時に実行されるシェルコマンド。
.It Va sig_stop
デフォルトの
.Cm stop
処理において、プロセスを停止するのに送られるシグナル。
デフォルトは
.Dv SIGTERM
です。
.It Va sig_reload
デフォルトの
.Cm reload
処理において、プロセスを再読み込みさせるのに送られるシグナル。
デフォルトは
.Dv SIGHUP
です。
.El
.Pp
.Ar argument
で与えられた処理に対して、
.Ar argument Ns Va _cmd
が定義されていなければ、デフォルト処理が
.Ic run_rc_command
によって与えられます:
.Bl -tag -width ".Sy Argument" -offset indent
.It Sy argument
.Sy デフォルト処理
.It Cm start
.Va command
が実行されておらず、
.Ic checkyesno Va rcvar
が成功すれば、
.Va command
を起動します。
.It Cm stop
.Ic check_pidfile
または
.Ic check_process
(適切なほう) により
.Va command
の PID を特定し、それらの PID に対して
.Ic kill Va sig_stop
を実行し、そしてそれらの PID に対して
.Ic wait_for_pids
を実行します。
.It Cm reload
.Cm stop
と似ていますが、違うのは代わりに
.Va sig_reload
を使い、
.Ic wait_for_pids
を実行しないことです。
.It Cm restart
.Cm stop
処理を実行後に、
.Cm start
処理を実行します。
.It Cm status
.Va command
の PID を表示するか、もしくはスクリプト固有のステータス情報を表示します。
.It Cm poll
.Va command
が終了するのを待ちます。
.It Cm rcvar
使用される
.Xr rc.conf 5
変数を (もしあれば) 表示します。
この処理は、対応する
.Xr rc.conf 5
変数が
.Dq Li NO
に設定されていても動作します。
.El
.Pp
以下の変数は、
.Ic run_rc_command
が完了した後だけでなく、
.Ar ( argument Ns Va _cmd
のような) 処理でも参照できます:
.Bl -tag -width ".Va rc_flags" -offset indent
.It Va rc_arg
fast 及び force 処理が済んだ後の、
.Ic run_rc_command
に与えられた引数。
.It Va rc_flags
デフォルトのコマンド実行時のフラグ。
環境変数の
.Sq Ev flags
で上書きされない限り、デフォルトは
.Va ${name}_flags
です。
この変数は
.Ar argument Ns Va _precmd
処理で変更することができます。
.It Va rc_pid
.Va command
の PID (もしあるならば)。
.It Va rc_fast
.Dq Li fast
プレフィックスが使われた場合、空ではありません。
.It Va rc_force
.Dq Li force
プレフィックスが使われた場合、空ではありません。
.El
.It Ic run_rc_script Ar file argument
スクリプト
.Ar file
を引数
.Ar argument
で実行し、スクリプトからの戻り値を処理します。
.Pp
.Ar file
が実行される前に、多くのシェル変数が消去されます:
.Bd -ragged -offset indent
.Va name ,
.Va command ,
.Va command_args ,
.Va command_interpreter ,
.Va extra_commands ,
.Va pidfile ,
.Va rcvar ,
.Va required_dirs ,
.Va required_files ,
.Va required_vars ,
.Ar argument Ns Va _cmd ,
.Ar argument Ns Va _precmd .
.Ar argument Ns Va _postcmd .
.Ed
.Pp
.Ar file
起動時の動作は、以下のチェックに依るものになります:
.Bl -enum
.It
.Ar file
の名前が
.Pa .sh
で終わっていれば、カレントシェルに読み込まれます。
.It
.Ar file
がバックアップもしくは一時ファイルのようならば
(例. サフィックスが
.Pa ~ , # , .OLD , .orig
である)、無視します。
.It
.Ar file
が実行可能でなければ、無視します。
.It
.Xr rc.conf 5
変数の
.Va rc_fast_and_loose
が空ならば、
.Ar file
をサブシェルで読み込みます。
そうでなければ、カレントシェルで
.Ar file
を読み込みます。
.El
.It Ic set_rcvar Op Ar base
サービスを起動させるために必要な変数名を設定します。
通常
.Fx
では、デーモンの名称に文字列
.Dq Li "_enable"
を後置した
.Xr rc.conf 5
変数により、デーモンが制御されます。
これは
.Nx
には当てはまりません。
次のような行がスクリプト中にある場合、
.Pp
.Dl "rcvar=`set_rcvar`"
.Pp
この関数は適切な
.Xr rc.conf 5
変数を作成するために、呼び出し側のスクリプトで定義されているべき変数
.Va $name
の値を使用します。
引数
.Ar base
が設定されている場合は、
.Va $name
の代わりに
.Ar base
を使用します。
.It Ic wait_for_pids Op Ar pid ...
指定された全ての
.Ar pid
が消失するまで待ち、 2 秒ごとに残存している
.Ar pid
を出力します。
.It Ic warn Ar message
警告メッセージを
.Va stderr
に表示し、
.Xr logger 1
を使用してシステムログに記録をします。
この警告メッセージは、スクリプト名
.Va ( $0
より),
.Dq Li ": WARNING: " ,
及びこれに続く
.Ar message
で構成されます。
.El
.Sh 関連ファイル
.Bl -tag -width ".Pa /etc/rc.subr" -compact
.It Pa /etc/rc.subr
.Nm
ファイルは
.Pa /etc
に存在します。
.El
.Sh 関連項目
.Xr rc.conf 5 ,
.Xr rc 8
.Sh 歴史
.Nm
スクリプトは
.Nx 1.3
で登場しました。
.Xr rc.d 8
をサポートする関数は
.Nx 1.5
で登場しました。
.Nm
スクリプトは
.Fx 5.0
ではじめて登場しました。