一、
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 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
2
3
4
5
6
7
8 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你的服务了。