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目录:

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,当然这些信息可以根据自己需要定制,具体脚本如下:

1#!/bin/sh 2#chkconfig: 345 86 14 3#description: Startup and shutdown script for Redis 4 5PROGDIR=/usr/local/bin 6PROGNAME=redis-server 7DAEMON=$PROGDIR/$PROGNAME 8CONFIG=/etc/redis.conf 9PIDFILE=/var/run/redis.pid 10DESC="redis daemon" 11 12SCRIPTNAME=/etc/init.d/redisd 13 14start() 15{ 16         if test -x $DAEMON 17         then 18        echo -e "Starting $DESC: $PROGNAME" 19                   if $DAEMON $CONFIG 20                   then 21                            echo -e "OK" 22                   else 23                            echo -e "failed" 24                   fi 25         else 26                   echo -e "Couldn't find Redis Server ($DAEMON)" 27         fi 28} 29 30stop() 31{ 32         if test -e $PIDFILE 33         then 34                   echo -e "Stopping $DESC: $PROGNAME" 35                   if kill `cat $PIDFILE` 36                   then 37                            echo -e "OK" 38                   else 39                            echo -e "failed" 40                   fi 41         else 42                   echo -e "No Redis Server ($DAEMON) running" 43         fi 44} 45 46restart() 47{ 48    echo -e "Restarting $DESC: $PROGNAME" 49    stop 50    start 51} 52 53 54list() 55{ 56         ps aux | grep $PROGNAME 57} 58 59case $1 in 60         start) 61            start 62        ;; 63         stop) 64        stop 65        ;; 66         restart) 67        restart 68        ;; 69         list) 70        list 71        ;; 72         *) 73        echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2 74        exit 1 75        ;; 76esac 77exit 0 78

2、增加服务并开机启动

1#!/bin/sh 2cp ./redisd /etc/rc.d/init.d/redisd 3chmod +x /etc/rc.d/init.d/redisd 4 5chkconfig --add redisd 6chkconfig --level 345 redisd on 7chkconfig --list redisd 8

执行该脚本后,就可以开始 start|stop|restart|list你的服务了。

代码交流 2021