起動デーモン ( rc.d ) の設定

OSの起動、停止時に実行されるデーモンの起動、停止スクリプトの設定を記載します。

 

OS起動時のinit

おそらくは、Linuxの大半のディストリビューションは、起動時にまず、/etc/inittabを読み込み、initプロセスを実行します。
initプロセスは、まず、システムのイニシャライズの為、/etc/rc.d/rc.sysinitを実行します。
続けて、起動時のデフォルトinitレベルに従い、それを実行します。
どのinitレベルで起動するかは、/etc/inittabに、id:5:initdefault:などの書式で設定してあると思います。(id:5の場合はinit5になります。)
指定されたinitレベルを実行した後は、/etc/rc.d/rc.localを実行します。
ここで設定するのは、rc.sysinitrc.localの間に実行されるスクリプトの管理です。
*rc.dは、OSの起動処理(init)内から呼ばれ、起動や停止時のデーモンを制御する働きをします。

 

なお、RedHat系ディストリビューションの多くは、initレベルにより以下のような動作をするはずです。

init0 = 停止
init1 = シングルユーザーモード
init2 = NFSを使用しないテキストログインモード(マルチユーザーモード)
init3 = テキストログインモード(マルチユーザーモード)
init4 = 未使用
init5 = GUIログインモード(マルチユーザーモード)
init6 = 再起動

RedHat系では、init0からinit6が、/etc/rc.d/以下の、rc0.dからrc6.dのディレクトリに対応します。

 

rc0.dからrc6.dには、起動や停止時に実行するべきスクリプトファイルがおさめられています。
このファイルは、/etc/rc.d/init.d/内のスクリプトファイルのシンボリックファイルで、規則に従った命名がされています。

 

ファイル名の先頭がKの場合は停止、Sの場合は起動、その後に続く数字は、実行される順番です。
数字は実行順序で、数字の小さい方から実行されます。
例えば、/etc/rc.d/rc0.d/K15httpd/etc/rc.d/rc5.d/S85httpdなどです。
ですから、元のスクリプトを/etc/init.d/以下に配置し、rc0.dからrc5.dまでK数字、S数字などを付けた、シンボリックリンクを作成すれば良い事になります。

 

しかし、手作業でやるには余りにも手間のかかる作業ですので、これを簡単に作業出来るコマンド(chkconfig)を利用します。
ただし、このコマンドで操作するには、スクリプトファイルが一定の規則に従って書かれている必要がある為、自作で適当に作ったスクリプトは残念ながらコマンドから操作することはできません。
自作でスクリプトを作成する場合は、最後のスクリプトの作成例を参考にしてください。

 

 

chkconfigで起動デーモンの設定

ディストリビューションで配布されているパッケージを利用する場合は、chkconfigコマンドから操作可能なはずです。
例えば、http(Apache)をインストールすれば、/etc/init.d/httpdというスクリプトがインストールされるでしょう。

chkconfigコマンドの一覧

動作 コマンド
現在設定されている一覧を表示 chkconfig –list
rc*.d以下にリンクを作成 chkconfig –add [スクリプト名]
rc*.d以下のリンクを削除 chkcinfg –del [スクリプト名]
rc2,3,4,5のリンクをSに変更(起動) chkconfig [スクリプト名] on
rc2,3,4,5のリンクをKに変更(停止) chkconfig [スクリプト名] off
指定rcのリンクをSに変更(起動) chkconfig –level [rcレベル] [スクリプト名] on
指定rcのリンクをKに変更(停止) chkconfig –level [rcレベル] [スクリプト名] off

起動や停止する順番の数字は指定出来ません。これは、スクリプトファイルにあらかじめ決められているからです。

 

chkconfigの使用例

ここでは、httpdを例に説明します。

 

rc*.d内に配置する。

chkconfig --add httpd

 

httpdが起動するように設定する。

chkconfig httpd on

 

httpdが起動しないように設定する

chkconfig httpd off

 

httpdがinit3,init5の時だけ起動する設定にする。

chkconfig httpd off
chkconfig --level 35 httpd on

 

 

 

スクリプトの作成例

chkconfigで動作させる為には、一定の規則に沿ってスクリプトを作成する必要があります。
以下は、Apache-Tomcat用に私が作成したスクリプです。
内容は単純なので解りやすいと思います

chkconfigを利用する場合には、特に、. /etc/rc.d/init.d/functions行までが重要になります。

このファイルを利用するには、/etc/init.d/tomcatとして保存し、実行権限を与えます。

chmod 755 /etc/init.d/tomcat

それ以降は、chkconfigから操作可能となります。

 

rc*.d内に配置

chkconfig --add tomcat

 

起動するように設定

chkconfig tomcat on

すると、以下のリンクが作成され設定完了です。


/etc/rc.d/rc0.d/K16tomcat

/etc/rc.d/rc1.d/K16tomcat

/etc/rc.d/rc2.d/K16tomcat

/etc/rc.d/rc3.d/S84tomcat

/etc/rc.d/rc4.d/S84tomcat

/etc/rc.d/rc5.d/S84tomcat

/etc/rc.d/rc6.d/K16tomcat

 

#!/bin/sh
#
# Start , Stop Restart For Tomcat
#
# chkconfig: 345 84 16
# description: jakarta-tomcat is an ApplicationServer.
# processame: Catalina

# Source function liblary.
. /etc/rc.d/init.d/functions

CATALINA_HOME=/usr/local/apache-tomcat-6.0.24
CATALINA_SH=$CATALINA_HOME/bin/catalina.sh
PID_FILE=/var/run/tomcat.pid

start() {
   PROC=`ps ax | grep -v grep | grep java | grep tomcat | wc -l`
   if [ ${PROC} -eq 0 ]; then
     echo "Starting Tomcat Server :"
     su -l tomcat -c "$CATALINA_SH start"
     `sleep 5`
     `ps ax | grep -v grep | grep java | grep tomcat|awk '{print$1}' > $PID_FILE`
   else
     echo "This Running Tomcat......."
   fi
}

stop() {
   PROC=`ps ax | grep -v grep | grep java | grep tomcat | wc -l`
   if [ ${PROC} -eq 0 ]; then
     echo "Tomcat Not Running....."
     if [ -f $PID_FILE ];then
	rm $PID_FILE
     fi
   else
     echo "Stopping Tomcat Server :"
     su -l tomcat -c "$CATALINA_SH stop"
     if [ -f $PID_FILE ];then
        rm $PID_FILE
     fi
   fi
}

restart() {
   stop
   sleep 5
   start
}

# See how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	*)
	echo $"Usage: $0 {start|stop|restart}"
	exit 1

esac
exit 0

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">