ブートとシャットダウン

  1. 概要
  2. 実行レベル
  3. inittab 概要
  4. OS 別詳細情報
    1. solaris
    2. HP-UX
    3. Linux
    4. Digital UNIX のシャットダウンの例
  5. FAQ

概要

UNIX システムがブートされると、init が呼び出されます。 init は、/etc/inittab の initdefault エントリの有無を調べます。 存在する場合は、実行レベルとして、そのエントリで指定される実行レベルを使います。 存在しない場合は、仮想システム・コンソールから実行レベルに入ります。

init は、8つの実行レベル、 つまり0から6およびSまたはsのうちの1つをとります。 この実行レベルは、特権ユーザが /sbin/init を実行したとき変わります。 実行レベル0,5,6は、システムをシャットダウンするためのもの、 2,3,4はマルチ・ユーザの運転状態のものです。

各実行レベルでの処理は、/etc/rc{実行レベル}.d に格納されているスクリプトを実行することで処理されます。 実行順序はソート順です。すなわち スクリプトの名前の先頭が K で始まっているものが先に実行されますが、 これらはプロセスを強制終了します。 次に S で始まるものが実行され、これらはプロセスを起動します。

init は、/etc/inittab にある各プロセスを生成し、 自分が生み出したプロセスの終了シグナルを受け取ると、それを記録します。




実行レベル

レベル 状    態 説               明
0電源切断 電源を切れるようにマシンをシャットダウンします
1システム管理 システム管理者モードにします。すべてのファイル・システムはマウントされ、
アクセス可能ですが、ユーザはログインしていません
2マルチ・ユーザ システムはマルチ・ユーザ・モードですが、NFS は使用できません。
3NFS 資源共用
マルチ・ユーザ
遠隔ファイル共用プロセスとデーモンを起動し、遠隔資源をマウントします。
4マルチ・ユーザ 代替マルチ・ユーザ環境構成を定義するのに使用されますが、
通常は使用されません
5電源切断 システムを停止し、ファームウェアのモニタに移行します
6再ブート システムを停止し、inittab の initdefault エントリで定義される状態に再ブートします
S,sシングル・ユーザ シングル・ユーザ・モードに入り、 必須カーネル・プロセスだけ実行されます




inittab 概要

init デーモンが起動するプロセスを知るためのファイルで、 inittab ファイル内の各エントリは次の4つのフィールドから構成され、 それらの意味は以下のとおりです。

 id:rstate:action:process

フィールド 説              明
id エントリの識別子
rstate 実行レベルで実行されるコマンドやスクリプトに対応します。 0/1/2/3/4/5/6/S の 8 です。
action process フィールドに指定するプロセスの実行方法
process 実行するプロセスの名前



action はブート init に process フィールドで指定されたプロセスをどのように扱うかを示します。 以下のアクションを指定できます。

action 説              明
boot ブート init の inittab ファイルの読み込み時のみエントリを処理します。 ブート init は、そのプロセスを開始し、終了を待たず、 プロセスが死んだときも、再起動はしません。 この手順を意味のあるものにするためには rstate を、 デフォルトの実行レベルかブート init のブート時の実行レベルにしなければなりません。 このアクションは、システムのハードウェアリブートの後に行う初期化に便利です。
bootwait ブート init がブートされて、inittab を初めて読むときだけ処理されます。 ブート init はプロセスを起動しその終了を待ちます。 プロセスが死んでも再起動しません。
initdefault ブート init が最初に実行されるときだけ走査されます。 ブート init は、このエントリが存在した場合に、 実行レベルの初期値をこのエントリを使って決めます。 このエントリの rstate フィールドに指定された実行レベルのうち、 最も高いレベルが初期状態として選ばれます。 rstate フィールドに何もなかった場合は、ブート init の実行レベルは 6 になります。 initdefault のエントリでは、ブート init がシングルユーザ状態で起動するようにはできません。 さらに、ブート init が initdefault のエントリを inittab の中に見つけられないときは、 ブート時にユーザに対して実行レベルの初期値を要求します。
off このエントリに対応するプロセスが、現在実行中ならば警告シグナル (SIGTERM) が送られ、20秒後に消去シグナル (SIGKILL) が送られて終了させます。 プロセスが動いていなければ何もしません。
once ブート init がエントリの rstate にマッチする実行レベルに入るとき、 プロセスを開始しその終了を待ちません。 終了するとき、そのプロセスを再起動しません。 ブート init が新しい実行レベルに入るが、 前のレベルで実行されているプロセスがある場合はそのプロセスは再起動されません。
ondemand この命令は、respawn と同じ意味を持ちます。 機能的には、respawn とまったく同一のものですが、 実行レベルとの関連の違いをつけるために違うキーワードが付けられています。 このアクションは、rstate フィールドが a, b, c のどれかの場合のみ使われます。
powerfail このエントリに対応するプロセスは、ブート init が電源異常シグナル (SIGPWR IR signal (5) 参照)を受け取ったときにだけ実行されます。
powerwait このエントリに対応するプロセスは、ブート init が電源異常シグナル (SIGPWR) を受け取ったときだけ実行され、inittab の処理の終了を待ちます。
respawn プロセスが存在しない場合、そのプロセスを開始しますが終了を待ちません (inittab ファイルの走査を続けます)。 終了したときには、プロセスを再起動します。 プロセスが存在する場合は、何もせずに inittab ファイルの走査を続行します。
sysinit ブート init が、コンソールにアクセスを試みる前に実行されます。 これはブート init が実行レベルの情報を入手しようとするデバイスの初期化に のみ使用されることを意図したものです。 これらを実行し、その終了を待ってから実行を継続します。
wait ブート init がエントリの rstate にマッチュするレベルになった場合、 そのプロセスを開始し、その終了を待ちます。 ブート init が同じ実行レベルにある間に、再度 inittab が読まれた場合には、 ブート init は、これを無視します。




OS 別詳細情報

ブートとシャットダウンは OS による違いがありますので、 主な違いを以下の表にまとめました。

N は実行レベルで 0/1/2/3/4/5/6/S のいずれかです。

項目 solaris HP-UX Linux
自動起動スクリプト /sbin/rcN /sbin/rc
/sbin/rc.utils
/etc/rc.d/rcN.d
自動起動用ファイル格納先 /etc/init.d
/etc/rcN.d
/sbin/init.d
/sbin/rcN.d
/etc/init.d
メッセージ出力先 /dev/console /etc/rc.log /var/log/boot.log(.N)
/var/log/messages(.N)
/var/run/utmp
/var/log/wtmp (binary)
スクリプトの PATH /usr/sbin:/usr/bin /sbin /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin




solaris

現在のランレベルは、以下のコマンドで知ることができます。

 who -r

  1. ブート用のファイル
  2. 実行制御スクリプト
  3. ブートの例
  4. シャットダウン用のファイル
  5. シャットダウンの例

ブート用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/etc/init.d 通常 /etc/rcN.d に追加する場合は、 実体はここにいれてシンボリックリンクする
/sbin/rcS,/etc/rcS.d/* ブート処理
/sbin/rc2,/etc/rc2.d/*
/sbin/rc3,/etc/rc3.d/*
マルチ・ユーザ初期化処理

ここで、/sbin/rc{実行レベル} は、 /etc/rc{実行レベル}.d ディレクトリにあるスクリプト・ファイルを実行するスクリプトで、 以下の手順で実行します。

  1. ASCII 文字列としてソートした順に実行します。
  2. スクリプト・ファイルが *.sh の場合は、そのまま実行されますが、 それ以外の場合は、"start" という引数をもって、実行します。

以下は、SunOS 5.5.1 の inittab です。


id r action process
--+-+------+----------------------------------------------------- 
ap::sysinit:/sbin/autopush -f /etc/iu.ap
fs::sysinit:/sbin/rcS		>/dev/console 2>&1 </dev/console
is:3:initdefault:
p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/console 2>&1
s0:0:wait:/sbin/rc0		>/dev/console 2>&1 </dev/console
s1:1:wait:/usr/sbin/shutdown -y -iS -g0	>/dev/console 2>&1 </dev/console
s2:23:wait:/sbin/rc2		>/dev/console 2>&1 </dev/console
s3:3:wait:/sbin/rc3		>/dev/console 2>&1 </dev/console
s5:5:wait:/sbin/rc5		>/dev/console 2>&1 </dev/console
s6:6:wait:/sbin/rc6		>/dev/console 2>&1 </dev/console
fw:0:wait:/sbin/uadmin 2 0	>/dev/console 2>&1 </dev/console
of:5:wait:/sbin/uadmin 2 6	>/dev/console 2>&1 </dev/console
rb:6:wait:/sbin/uadmin 2 1	>/dev/console 2>&1 </dev/console
sc:234:respawn:/usr/lib/saf/sac -t 300
co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat

各 id の概要は、以下の通りです。

id 説                明
ap STREAMS モジュールの初期化
fc ファイル・システムのチェック
is デフォルトのランレベル
ps power fail shutdown
s0 ランレベル 0
s1 ランレベル 1
s2 ランレベル 2
s3 ランレベル 3
s5 ランレベル 5
s6 ランレベル 6
of off
fw Firmware
RB リブート
rb リブート single user
sc service access controller 初期化
co console 初期化

それぞれのステージで /sbin/rc{実行レベル} のスクリプトを実行します。

実行制御スクリプト

実行制御スクリプト (rc) を使用して実行レベルの移行を制御します。
各実行レベルには、/etc/rc{実行レベル}.d が対応しており、 その中にはさまざまな処理をするスクリプトがあります。

たとえば、SunOS 5.5.1 の /etc/rc0.d には以下のスクリプトがあります。

./              K39oes@         K55syslog*      K70cron*
../             K42audit*       K57sendmail*    K75nfs.client*
K00ANNOUNCE*    K47asppp*       K66nfs.server*  K76nscd*
K20lp*          K50utmpd*       K69autofs*      K85rpc*

たとえば、SunOS 5.5.1 の /etc/rc2.d には以下のスクリプトがあります。

./                  S30sysid.net*       S74autofs*          S89bdconfig@
../                 S47asppp*           S74syslog*          S90loc.ja.cssd*
K20lp*              S69inet*            S75cron*            S90loc.ja.kmod*
K60nfs.server*      S70uucp*            S76nscd*            S91leoconfig*
README              S71rpc*             S80PRESERVE*        S92rtvc-config*
S01MOUNTFSYS*       S71sysid.sys*       S80lp*              S92volmgt*
S05RMTMPFILES*      S72autoinstall*     S85lmgrd*           S93cacheos.finish*
S20sysetup*         S72inetsvc*         S88sendmail*        S99audit*
S21perf*            S73nfs.client*      S88utmpd*           S99oes@

/etc/rcN.d 内のスクリプトは常に ASCII 文字列としてソートした順に実行されます。
スクリプト名の形式は次のとおりです(正規表現)。

[K,S][0-9][0-9][A-Za-z\-]+

名前が K で始まるスクリプトを実行すると、プロセスを終了 (kill) します。
名前が S で始まるスクリプトを実行すると、プロセスを起動します。

従って、新たに追加する場合は、引数に start と stop を処理できるスクリプトを /etc/init.d に入れ、 rc2.d に S99XXXXX を rc0.d に K00XXX としてそれをシンボリックリンクします。

■ 確認方法
# /etc/rc2.d/S99XXXXX start
# /etc/rc0.d/K00XXXXX stop

■ 例 : Apache Web Server

#!/bin/sh
# Startup script for the Apache Web Server

# See how we were called.
case "$1" in
  start)
        echo -n "Starting Apache"
        /usr/local/apache/bin/apachectl start
        ;;
  stop)
        echo -n "Shutting down Apache"
        /usr/local/apache/bin/apachectl stop
        ;;
  status)
        echo -n "Status"
        /usr/local/apache/bin/apachectl status
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

ブートの例

  1. オペレーティング・システムを起動します。
  2. /sbin/init を実行します。
    上記の場合、is:3:initdefault なので、rc3 まで実行されます。
  3. /sbin/init は /etc/rcS.d/S30rootusr.sh を実行します。
    ディスクレスとデータレスの最小限のホスト構成とネットワーク構成を確立します。
  4. /etc/rc1 を実行します。
  5. /etc/rc2 を実行します。
    1. /etc/rc2.d/S69inet を実行します。
      IP の構成、ドメイン名のルーティングと設定
    2. /etc/rc2.d/S71rpc を実行します。
      NIS,NIS+,DNS のいずれかのネーム・サービスを起動します。
    3. /etc/rc2.d/S72inetsvc を実行します。
      inetd を起動します。
  6. /etc/rc3 を実行します。

シャットダウン用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/etc/init.d 通常 rcN.d に追加する場合、 実体はここにいれてシンボリックリンクする
/sbin/rc0,/etc/rc0.d/* シャットダウン処理
/sbin/rc5,/etc/rc5.d/* シャットダウン処理
/sbin/rc6,/etc/rc6.d/* リブート処理

シャットダウンの例

  1. /sbin/init を実行します。
  2. /etc/rc0.d/K00ANNOUNCE を実行します。
    シャットダウンのメッセージを出します。
  3. /etc/rc0.d/K20lp を実行します。
    lpd を停止します。
  4. /etc/rc0.d/K39oes .... K85rpc を実行します。


【 関連項目 】(solaris)

init(1M),inittab(4),shutdown(1M)




HP-UX

  1. ブート用のファイル
  2. 実行制御スクリプト
  3. ブートの例
  4. シャットダウン用のファイル
  5. シャットダウンの例

ブート用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/sbin/init.d 通常 /sbin/rcN.d に追加する場合は、 実体はここにいれてシンボリックリンクする
/sbin/rc,/sbin/rcS.d/* ブート処理
/sbin/rc,/sbin/rc2.d/*
/sbin/rc,/sbin/rc3.d/*
マルチ・ユーザ初期化処理

ここで、/sbin/rc は、 /sbin/rc{実行レベル}.d ディレクトリにあるスクリプト・ファイルを実行するスクリプトで、 以下の手順で実行します。

  1. ASCII 文字列としてソートした順に実行します。
  2. スクリプト・ファイルが *.sh の場合は、そのまま実行されますが、 それ以外の場合は、"start_msg","start" という引数をもって、実行します。

以下は、HP-UX B.11.00 U 9000/800 の inittab です。 それぞれのステージで /sbin/rc のスクリプトを実行します。


id   r action process
----+-+------+----------------------------------------------------- 
init:3:initdefault:
ioin::sysinit:/sbin/ioinitrc >/dev/console 2>&1
tape::sysinit:/sbin/mtinit > /dev/console 2>&1
muxi::sysinit:/sbin/dasetup   /dev/console 2>&1 # mux init
stty::sysinit:/sbin/stty 9600 clocal icanon echo opost onlcr ixon icrnl ignpar <
/dev/systty
brc1::bootwait:/sbin/bcheckrc /dev/console 2>&1 # fsck, etc.
link::wait:/sbin/sh -c "/sbin/rm -f /dev/syscon; \
                        /sbin/ln /dev/systty /dev/syscon" >/dev/console 2>&1
cprt::bootwait:/sbin/cat /etc/copyright >/dev/syscon           # legal req
sqnc::wait:/sbin/rc /dev/console 2>&1           # system init
#powf::powerwait:/sbin/powerfail >/dev/console 2>&1            # powerfail
cons:123456:respawn:/usr/sbin/getty console console            # system console
#ttp1:234:respawn:/usr/sbin/getty -h tty0p1 9600
#ttp2:234:respawn:/usr/sbin/getty -h tty0p2 9600
#ttp3:234:respawn:/usr/sbin/getty -h tty0p3 9600
#ttp4:234:respawn:/usr/sbin/getty -h tty0p4 9600
#ttp5:234:respawn:/usr/sbin/getty -h tty0p5 9600
ems1::bootwait:/sbin/rm -f /etc/opt/resmon/persistence/runlevel4_flag
ems2::bootwait:/sbin/cat /etc/opt/resmon/persistence/reboot_flag
ems3:3456:wait:/usr/bin/touch /etc/opt/resmon/persistence/runlevel4_flag
ems4:3456:respawn:/etc/opt/resmon/lbin/p_client
#ups::respawn:rtprio 0 /usr/lbin/ups_mond -f /etc/ups_conf

実行制御スクリプト

実行制御スクリプト (rc) を使用して実行レベルの移行を制御します。
各実行レベルには、/sbin/rc{実行レベル}.d が対応しており、 その中にはさまざまな処理をするスクリプトがあります。

たとえば、HP-UX B.11.00 U 9000/800 の /sbin/rc0.d には以下のスクリプトがあります。

./               K10dbora@        K888kminit@
../              K480syncer@      K890kmbuild@
K10apache@       K800killall@     K900localmount@

たとえば、HP-UX B.11.00 U 9000/800 の /sbin/rc3.d には以下のスクリプトがあります。

./               S100nfs.server@  S990dtlogin.rc@
../              S200tps.rc@      S99dbora@

/sbin/rcN.d 内のスクリプトは常に ASCII 文字列としてソートした順に実行されます。
スクリプト名の形式は次のとおりです(正規表現)。

[K,S][0-9][0-9][A-Za-z\-]+

名前が K で始まるスクリプトを実行すると、プロセスを終了 (kill) します。
名前が S で始まるスクリプトを実行すると、プロセスを起動します。

従って、新たに追加する場合は、引数に start_msg/start と stop_msg/stop を処理できるスクリプトを /sbin/init.d に入れ、 rc3.d に S99XXXXX を rc0.d に K00XXX としてそれをシンボリックリンクします。

■ 確認方法
# /sbin/rc3.d/S99XXXXX start
# /sbin/rc0.d/K00XXXXX stop

■ 例 : oracle の自動起動

oracle インストールマニュアルにあるものは、正しく動作しません。 修正部分は緑字で示します。

HP-UX の場合は、start_msg/stop_msg の引数を処理する部分があると、 start/stop に先立って実行されます。 通常実行文は、メッセージ出力で、start_msg はログに、stop_msg はシャットダウンを行った端末に出力されます。

#!/bin/sh
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.

LANG=C;export LANG
PATH=/bin:/usr/bin:${PATH}
ORA_HOME=/home7/asg920/app/oracle/product/9.2.0
ORA_OWNER=asg920
if [ ! -f $ORA_HOME/bin/dbstart ]
then
   echo "Oracle startup: cannot start"
   exit 1
fi

case "$1" in
  start)
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
  su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"
  ;;
  stop)
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
  su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"
  ;;

  start_msg)
  echo "Start oracle $ORA_OWNER"
  ;;
  stop_msg)
  echo "Shutdown oracle $ORA_OWNER"
  ;;
esac
exit 0

ブートの例

  1. オペレーティング・システムを起動します。
  2. /sbin/init を実行します。
    上記の場合、init:3:initdefault なので、rc3.d まで実行されます。
  3. /sbin/rc1.d を実行します。
  4. /sbin/rc2.d を実行します。
    1. /sbin/rc2.d/S006hpfc を実行します。
      HP Fibre Channel interfaces を構成します。
    2. /sbin/rc2.d/S400nfs.core を実行します。
      NFS core subsystem を起動します。
    3. /sbin/rc2.d/S99apache を実行します。
      Apache を起動します。
  5. /sbin/rc3.d を実行します。

シャットダウン用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/sbin/init.d 通常 rcN.d に追加する場合、 実体はここにいれてシンボリックリンクする
/sbin/rc,/sbin/rc0.d/* シャットダウン処理
/sbin/rc,/sbin/rc5.d/* シャットダウン処理
/sbin/rc,/sbin/rc6.d/* リブート処理

シャットダウンの例

  1. /sbin/init を実行します。
  2. /sbin/rc0.d/K800killall を実行します。
    全プロセスを kill します。


【 関連項目 】(HP-UX)

init(1M),inittab(4)




Linux

  1. ブート用のファイル
  2. 実行制御スクリプト
  3. ブートの例
  4. シャットダウン用のファイル
  5. シャットダウンの例

ブート用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/etc/init.d 通常 rcN.d に追加する場合は、 実体はここにいれてシンボリックリンクする
/etc/rc,/etc/rcS.d/* ブート処理
/etc/rc,/etc/rc2.d/*
/etc/rc,/etc/rc3.d/*
マルチ・ユーザ初期化処理

ここで、/etc/rc は、 /etc/rc{実行レベル}.d ディレクトリにあるスクリプト・ファイルを、 以下の手順で実行します。

  1. ASCII 文字列としてソートした順に実行します。
  2. スクリプト・ファイルが *.sh の場合は、そのまま実行されますが、 それ以外の場合は、"start" という引数をもって、実行します。

以下は、Linux 2.4.7-2.24ml の inittab です。 それぞれのステージで /etc/rc のスクリプトを実行します。


id r action process
--+-+------+----------------------------------------------------- 
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Things to run in every runlevel.
ud::once:/sbin/update

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon

実行制御スクリプト

実行制御スクリプト (rc) を使用して実行レベルの移行を制御します。
各実行レベルには、/etc/rc{実行レベル}.d が対応しており、 その中にはさまざまな処理をするスクリプトがあります。

たとえば、Linux 2.4.7-2.24ml の /etc/rc0.d には以下のスクリプトがあります。

./          K05keytable*  K25sshd*    K75netfs*    K92ipchains*  K98kparam*
../         K10apache*    K50xinetd*  K80random*   K92iptables*  S00killall*
K00webmin*  K10dbora*     K60crond*   K88syslog*   K95kudzu*     S01halt*
K05atd*     K10xfs*       K74nscd*    K90network*  K95reconfig*

たとえば、Linux 2.4.7-2.24ml の /etc/rc3.d には以下のスクリプトがあります。

./          K74nscd*      S08ipchains*  S17keytable*  S56xinetd*  S98webmin*
../         S02kparam*    S08iptables*  S20random*    S90crond*   S99apache*
K10dbora*   S05kudzu*     S10network*   S25netfs*     S90xfs*     S99local*
K10webmin*  S06reconfig*  S12syslog*    S55sshd*      S95atd*

/etc/rcN.d 内のスクリプトは常に ASCII 文字列としてソートした順に実行されます。
スクリプト名の形式は次のとおりです(正規表現)。

[K,S][0-9][0-9][A-Za-z\-]+

名前が K で始まるスクリプトを実行すると、プロセスを終了 (kill) します。
名前が S で始まるスクリプトを実行すると、プロセスを起動します。

従って、新たに追加する場合は、引数に start と stop を処理できるスクリプトを /etc/init.d に入れ、 rc2.d に S99XXXXX を rc0.d に K00XXX としてそれをシンボリックリンクします。

■ 確認方法
# /etc/rc2.d/S99XXXXX start
# /etc/rc0.d/K00XXXXX stop

■ 例 : Apache Web Server

#!/bin/sh
# Startup script for the Apache Web Server

# See how we were called.
case "$1" in
  start)
        echo -n "Starting Apache"
        /usr/local/apache/bin/apachectl start
        ;;
  stop)
        echo -n "Shutting down Apache"
        /usr/local/apache/bin/apachectl stop
        ;;
  status)
        echo -n "Status"
        /usr/local/apache/bin/apachectl status
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

ブートの例

  1. オペレーティング・システムを起動します。
  2. /etc/rc1 を実行します。
  3. /etc/rc2 を実行します。
    1. /etc/rc2.d/S10network を実行します。
      ネットワーク構成を準備します
    2. /etc/rc2.d/S99apache を実行します。
      Apache を起動します。
    3. /etc/rc2.d/S99local を実行します。
      /proc を準備します。
  4. /etc/rc3 を実行します。

シャットダウン用のファイル

/etc/inittab init で起動するプロセスの情報が格納されている
/etc/init.d 通常 rcN.d に追加する場合、 実体はここにいれてシンボリックリンクする
/etc/rc,/etc/rc0.d/* シャットダウン処理
/etc/rc,/etc/rc5.d/* シャットダウン処理
/etc/rc,/etc/rc6.d/* リブート処理

シャットダウンの例

  1. /sbin/init を実行します。
  2. /etc/rc0.d/K00webmin を実行します。
    シャットダウンのはじめのスクリプトです。
  3. /etc/rc0.d/K10dbora を実行します。
    oracle を停止します。
  4. /etc/rc0.d/S00killall .... S01halt を実行します。


【 関連項目 】(Linux)

init(8),inittab(5),shutdown(8)




Digital UNIX のシャットダウンの例

Digital UNIX のシャットダウンでは、rc0 を実行するには、以下のようにします。
shutdown -r では、rc0 は実行されません。

 # shutdown -rs
 # shutdown

【 関連項目 】(Digital UNIX)

init(8),inittab(4),shutdown(8)




FAQ

  1. インストールマニュアルにあるスクリプトで oracle の自動起動ができないのはなぜですか?(HP-UX)

    HU-UX では init は /sbin/rc を使い /sbin/rcN.d にある スクリプトを順次実行します。
    /sbin/rc では、PATH を以下のように設定していますので、/usr/bin/su を実行できません。
    従って、例にあるように PATH を設定していただくか、フルパスを指定してください。

    PATH=/sbin
    export PATH  

    また、バックグランドでの起動もできません。