一、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目录:
rcx.d目录中存放都是/etc/rc.d/init.d目录中脚本的符号链接,以rc3.d为例:
这些符号链接都以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
echo -e "failed"
fi
else
echo -e "Couldn't find Redis Server ($DAEMON)"
fi
}
stop()
{
if test -e $PIDFILE
then
echo -e "Stopping $DESC: $PROGNAME"
if kill `cat $PIDFILE`
then
echo -e "OK"
else
echo -e "failed"
fi
else
echo -e "No Redis Server ($DAEMON) running"
fi
}
restart()
{
echo -e "Restarting $DESC: $PROGNAME"
stop
start
}
list()
{
ps aux | grep $PROGNAME
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
list)
list
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2
exit 1
;;
esac
exit 0
点击redisd.rar可以下载完整脚本。
2、增加服务并开机启动
#!/bin/sh
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
点击distrbuteDaemon.rar可以下载完整脚本。
执行该脚本后,就可以开始start|stop|restart|list你的服务了。