UNIXな生活
更新:2002/12/12  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
/etc/rc.dの設定

Linuxのシステムサービスの起動を制御する場合は、/etc/rc.d/init.d内にスクリプトを作成して行ないます。
このスクリプトは各ランレベルに対応したrc*.d内に配置することによりLinuxの起動時に読みこまれ、システムサービスの起動を制御することが出来ます。
また、直接このスクリプトを指定し実行することにより、起動、停止、再起動が可能です。
たとえば、ネットワークサービスの再起動をする場合は、以下のコマンドを発行します。
/etc/rc.d/init.d/network retsart

/etc/rc.d内を見て、どのようなフォルダがあるか確認してください。以下はRedHatの例です。
rc(スクリプト)
rc.sysinit(スクリプト)
rc.local(スクリプト)
init.d(ディレクトリ)
rc0.d(ディレクトリ)
rc1.d(ディレクトリ)
rc2.d(ディレクトリ)
rc3.d(ディレクトリ)
rc4.d(ディレクトリ)
rc5.d(ディレクトリ)
rc6.d(ディレクトリ)

Linux起動時にinit(定義ファイル=/etc/inittab)が実行され、まずこの中のrc.sysinitが実行されます。
その次にrcスクリプトが起動するランレベルを引数に実行されます。
rcスクリプトでは、引数のランレベルに該当するrc*.dディレクトリ内のスクリプトを実行しシステムサービス(デーモン)の起動と停止を行ないます。
各rc*.d内のスクリプトファイルはinit.d内に実態ファイルがあり、rc*.d内はini.d内のスクリプトファイルのシンボリックリンクになっています。
rc*.d内のシンボリックリンクは"S"で始まるものと"K"で始まるものがあり、"S"で始まるものが起動、"K"で始まるものが停止です。
また、"S"や"K"のあとにある数字はrc*.d内の実行順序を表し、数字の小さいほうから順番に処理していきます。
rc.localはランレベルが2から5の時に読みこまれ実行しますので、rc2.d内からrc5.d内にシンボリックリンクが存在します。
各ランレベルに関わらず必ず実行したいものがあれば、rc.local内に記述すればシステムサービスを起動することが出来ます。


Linuxの起動については、ここを見て下さい。rcがいつ実行されるか、ランレベルの説明などがあります。
LinuxがBootする仕組み。


自分でrcスクリプトを作成し、システムサービスの起動を制御する

具体例
Tomcat3.2.3用スクリプトを作ってみましょう。
Tomcatを/usr/local/jakarta/jakarta-tomcat-3.2.3にインストールしたとして説明します。
rcスクリプトには最低限、start(),stop(),restart()が必要になると思いますので、この3つを定義していきます。

これがスクリプトの中身です。
#!/bin/sh
TOMCATDIR=/usr/local/jakarta/jakarta-tomcat-3.2.3
PROFILEDIR=/var/lock/subsys
start(){
if [ -f $PROFILEDIR/Tomcat ]; then
echo "Running Tomcat"
else
if [ -f $TOMCATDIR/bin/startup.sh ]; then
su - root -c "$TOMCATDIR/bin/startup.sh"
echo "Startting jakarta-tomcat "
touch $PROFILEDIR/Tomcat
sleep 5 else
echo "Tomcat File Not Founds "
fi
fi
return 0
}
stop(){
if [ -f $PROFILEDIR/Tomcat ]; then
if [ -f $TOMCATDIR/bin/shutdown.sh ]; then
su - root -c "$TOMCATDIR/bin/shutdown.sh"
echo "Stopping jakarta-tomcat "
rm $PROFILEDIR/Tomcat
sleep 5 else
echo "Tomcat File Not Founds "
fi
else
echo "Not Running Tomcat "
fi
return 0
}
restart(){
echo "Restartting Tomcat "
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
stop
start
;;
esac

スクリプトの説明
おおきく別けて、start(),stop,restart()を作成しています。どれを指定されたかをcaseで別けて実行しています。
まず最初にTOMCATDIR=/usr/local/jakarta/jakarta-tomcat-3.2.3として、変数TOMCATDIRにTomcatのPATHを格納しています。
つぎにPROFILEDIR=/var/lock/subsysとして、変数PROFILEDIRを設定しています。
Tomcat起動時にこのPROFILEDIR以下にtouchして、Tomcatというファイルを作成しています。
この/var/lock/subsys/Tomcatというファイルがあれば、Tomcatはすでに起動していると判断します。
逆に/var/lock/subsys/Tomcatがなければ、Tomcatは停止していると判断します。
この/var/lock/subsys/Tomcatがあるか判断するのが、if [ -f $PROFILEDIR/Tomcat ]; thenです。

start()では、/var/lock/subsys/Tomcatが存在すればコンソールにRunning Tomcatと出力し、スクリプトを停止します。
/var/lock/subsys/Tomcatがなければ、if [ -f $TOMCATDIR/bin/startup.sh ]; thenで、Tomcatの起動スクリプトファイルが存在するか確認し、存在すれば$TOMCATDIR/bin/startup.shを実行します。
Tomcatを実行するには、JAVA_HOME(JDKのPATH)が設定されている必要があります。ここではrootにJAVA_HOMEを設定し、rootでTomcatの起動を実行しています。su - root -c "$TOMCATDIR/bin/startup.sh"ここです。
$TOMCATDIR/bin/startup.shがなければ、コンソールにTomcat File Not Foundsを出力しています。

stop()では、start()の逆で、/var/lock/subsys/Tomcatが存在しなければコンソールにNot Running Tomcatと出力し、スクリプトを停止します。
var/lock/subsys/Tomcatがあれば、if [ -f $TOMCATDIR/bin/shutdown.sh ]; thenで、Tomcatの停止スクリプトファイルが存在するか確認し、存在すれば$TOMCATDIR/bin/shutdown.shを実行します。
$TOMCATDIR/bin/shutdown.shがなければ、コンソールにTomcat File Not Foundsを出力しています。

restart()では、コンソールにRestartting Tomcatを出力し、stop(),start()を順番に実行します。
なお、start(),stop()でsleep 5と指定しているのは、Tomcatの起動、終了に多少時間がかかるためスクリプトを一時とめて、Tomcatの起動、停止が完了するのを待っています。


スクリプトの配置

作成したスクリプトファイル(ここでは"tomcat"とします。)は/etc/rc.d/init.dに配置します。
rootで実行されるため、実行権限と所有者を変更します。
rootで
cp tomcat /etc/rc.d/init.d/tomcat
chown root.root /etc/rc.d/init.d/tomcat
chmod 744 /etc/rc.d/init.d/tomcat

このスクリプトを使用しTomcatを操作する場合は、rootで以下のようにします。
起動----/etc/rc.d/init.d/tomcat start
停止----/etc/rc.d/init.d/tomcat stop
再起動--/etc/rc.d/init.d/tomcat restart

Linuxの起動時などに自動で読みこまれるように、rc*.dにシンボリックリンクを作成します。
rc*.dにシンボリックリンクを作成する場合は、ランレベルを考慮する必要があります。
*ランレベルとは?
RedHatLinuxの場合は、
0=停止
1=シングルユーザーモード
2=NFSを使用しないテキストログインモード(マルチユーザーモード)
3=テキストログインモード(マルチユーザーモード)
4=未使用?
5=GUIログインモード(マルチユーザーモード)
6=再起動

1のシングルユーザーモードでは当然Tomcatは必要ありません。
0と6では、停止することが必要になります。
起動は2から5の間で、自分が必要とする所に作成してください。

今回は、3のテキストログインモード(マルチユーザーモード)でLinuxが起動した場合に、Tomcatが起動するように/etc/rc.d/rc3.dに/etc/rc.d/init.d/tomcatのシンボリックリンクを作成します。。
作成するシンボリックリンクのファイル名の先頭に"S"、つづけて実行される番号とtomcatというファイル名で作成します。
rootで、
ln -s /etc/rc.d/init.d/tomcat /etc/rc.d/rc3.d/S98tomcat

他のランレベルでも起動させる場合は、それぞれのrc*.d内に同じようにシンボリックリンクを作成してください。
また"S"のあとの数字は、それぞれのシステム内のファイルを見て決定してください。99がrc.localですから、それより少ない数字で、使用されていない数字を指定してください。


ランレベルの0と6、Linuxの停止と再起動にTomcatを停止するシンボリックリンクを作成。
停止させる場合は、シンボリックリンクのファイル名の先頭に"K"、つづけて実行される番号とtomcatというファイル名で作成します。
停止はrco.dとrc6.dに作成します。
rootで、
ln -s /etc/rc.d/init.d/tomcat /etc/rc.d/rc0.d/K02tomcat
ln -s /etc/rc.d/init.d/tomcat /etc/rc.d/rc6.d/K02tomcat

"K"のあとの数字は、それぞれのシステム内のファイルを見て決定してください。今回は私が使用しているシステムで最も小さい数字を指定してあります。


これでLinuxの起動時、及び停止時にtomcatの起動、停止が行なわれるようになりました。



Producted by Tomoya Sakurai