今回は/etc/init.d/rcを使わずにやる(正式な?)方法で起動時、終了時のスクリプトを実行してみる
まず、Linuxは/etc/inittabの定義に従って、/etc/init.d/rcをランレベルを引数にして実行する。
その後、/etc/rc$runlevel.dの中にあるディレクトリを順番に実行する。$runlevelは0~6の数値
(たとえばrc1.d,rc2.d,rc3.d,rc4.d,rc5.d,rc6.d)
/etc/init.d/rcの中を読めば分かるが、大まかな挙動は以下の通り。
1.現在のランレベルと前回のランレベルを取得する。
2.現在のランレベルに対応するディレクトリのKで始まるスクリプトを探し、前回のランレベルで実行されているなら(頭文字がSで始まるスクリプトが存在しているのなら)それを止める。
3.次に、Sで始まるディレクトリを探し、前回のランレベルで起動していないと判明したらstart、もしくはstopをかける。
ちなみに0,6はstopを引数にしてSから始まるスクリプトを順次実行する。
実行する順番はSもしくはKから始まる次の2桁の数値の若い順。
SとKではKが最初に実行される。
前回のスクリプトをこの方法で実現するなら
下記のようなスクリプトを用意すればOK
init.d/my_script rc0.d/K01my_script@ rc2.d/S99my_script@ rc6.d/K01my_script@my_scriptの中身は↓
#! /bin/sh ### BEGIN INIT INFO # # Default-Start: 2 # Default-Stop: 0 6 # Short-Description: rep2 ### END INIT INFO # PATH=/bin:/usr/bin:/sbin:/usr/sbin case "$1" in start) # rep2 HDD -> memory mkdir /dev/shm/rep2mem rsync -av --delete /var/www/rep2mem_bk/ /dev/shm/rep2mem/ ;; restart|force-reload) # nothing to do : ;; stop) #rep2 memory -> HDD rsync -av --delete /dev/shm/rep2mem/ /var/www/rep2mem_bk/ ;; *) echo "Usage: /etc/init.d/my_script {start|stop}" exit 2 ;; esac exit 0参考リンク
http://d.hatena.ne.jp/Naruhodius/20100923/1285247505
http://www.fulldigit.net/content/view/91/17/
cronで@rebootっていうのも書けたりするらしい
0 件のコメント:
コメントを投稿