天天看點

Redis啟動腳本

一、Linux啟動腳本原理

1、init和運作級别

以CentOS為例,init有7個運作級别(run level),打開/etc/inittab檔案能看到:

# Default runlevel. The runlevels used by RHS are:

# 0 – halt (Do NOT set initdefault to this)

# 1 – Sing user mode

# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)

# 3 – Full multiuser mode

# 4 – unused

# 5 – X11

# 6 – reboot (Do NOT set initdefault to this)

/etc/inittab檔案規定了系統進入到每一個運作級别時需要運作的指令,也規定了系統預設運作級别:

id:3:initdefault:

在機器引導時,系統進入預設運作級别,并執行相應級别所需指令。

2、服務啟動腳本

/etc/init.d中存放了所有的啟動腳本,我們可以通過如下指令來啟動某個服務:

#/etc/init.d/iptables start

或者

#service iptables start

以此來啟動iptables服務。

雖然/etc/init.d目錄中存放了所有啟動腳本,但是系統引導時,init并不直接在/etc/init.d目錄中查找各個服務的啟動腳本,而是在/etc/rc.d目錄中查找,該目錄中包含了代表不同的init啟動級别的子目錄即rcx.d目錄:

Redis啟動腳本

rcx.d目錄中存放都是/etc/rc.d/init.d目錄中腳本的符号連結,以rc3.d為例:

Redis啟動腳本

這些符号連結都以S或K開頭,随後跟一個數字以及腳本所控制的服務名稱,如K05rabbitmq-server,當init從低運作級别向高運作級别切換時,其按照數字遞增的順序運作所有以S開頭的腳本,S=start,即啟動腳本所控制的服務,按照數字遞減的順序殺死以K開頭的腳本,K=kill,即殺死腳本所控制的服務。

腳本啟動或者殺死的順序由數字來控制,當然,我們也可以改變這些:

#ln –s /etc/init.d/rabbitmq-server

S70rabbitmq-server

#ln –s /etc/init.d/rabbitmq-server K70rabbitmq-server

二、Redis啟動腳本

有了上面那些理論支撐,接下來就親自操刀編寫一個Redis啟動腳本。

1、建立啟動腳本

假設服務名稱為redis-server,可執行檔案路徑為/usr/local/bin,配置檔案為redis.conf,配置檔案路徑為/etc,程序ID存放檔案為redis.pid,程序ID存放檔案路徑為/var/run,腳本檔案為redisd,腳本檔案存放路徑為/etc/init.d,服務描述為redis daemon,當然這些資訊可以根據自己需要定制,具體腳本如下:

#!/bin/sh

#chkconfig: 345 86 14

#description: Startup and shutdown script

for Redis

PROGDIR=/usr/local/bin

PROGNAME=redis-server

DAEMON=$PROGDIR/$PROGNAME

CONFIG=/etc/redis.conf

PIDFILE=/var/run/redis.pid

DESC="redis daemon"

SCRIPTNAME=/etc/init.d/redisd

start()

{

         if

test -x $DAEMON

         then

echo -e "Starting $DESC: $PROGNAME"

                   if

$DAEMON $CONFIG

                   then

                            echo

-e "OK"

                   else

-e "failed"

                   fi

         else

                   echo

-e "Couldn't find Redis Server ($DAEMON)"

         fi

}

stop()

test -e $PIDFILE

-e "Stopping $DESC: $PROGNAME"

kill `cat $PIDFILE`

-e "No Redis Server ($DAEMON) running"

restart()

echo -e "Restarting $DESC: $PROGNAME"

stop

         start

list()

         ps

aux | grep $PROGNAME

case $1 in

         start)

                   start

;;

         stop)

         restart)

restart

         list)

list

         *)

echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2

exit 1

esac

exit 0

Redis啟動腳本

2、增加服務并開機啟動

cp ./redisd /etc/rc.d/init.d/redisd

chmod +x /etc/rc.d/init.d/redisd

chkconfig --add redisd

chkconfig --level 345 redisd on

chkconfig --list redisd

Redis啟動腳本

執行該腳本後,就可以開始start|stop|restart|list你的服務了。

繼續閱讀