{{ cat }}'s docs

26.1.0: nginx启动脚本


0. 启动脚本内容

#!/bin/bash
# chkconfig: - 30 21
# description: http service.
##上面三行
# 1是为了声明执行的shell是什么
# 2是声明chkconfig的runlevel、启动顺序、关闭顺序
# 3是描述
# Source Function Library
. /etc/init.d/functions
# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"

start() {
         echo -n $"Starting $prog: "
         mkdir -p /dev/shm/nginx_temp
         daemon $NGINX_SBIN -c $NGINX_CONF
         RETVAL=$?
         echo
         return $RETVAL
}

stop() {
         echo -n $"Stopping $prog: "
         killproc -p $NGINX_PID $NGINX_SBIN -TERM
         rm -rf /dev/shm/nginx_temp
         RETVAL=$?
         echo
         return $RETVAL
}

reload(){
         echo -n $"Reloading $prog: "
         killproc -p $NGINX_PID $NGINX_SBIN -HUP
         RETVAL=$?
         echo
         return $RETVAL
}

restart(){
         stop
         start
}

configtest(){
     $NGINX_SBIN -c $NGINX_CONF -t
     return 0
}

case "$1" in
   start)
         start
         ;;
   stop)
         stop
         ;;
   reload)
         reload
         ;;
   restart)
         restart
         ;;
   configtest)
         configtest
         ;;
   *)
         echo $"Usage: $0 {start|stop|reload|restart|configtest}"
         RETVAL=1
esac

exit $RETVAL
## 退出的时候返回执行状态码

1. 扩展:echo -n参数

echo test
test
[root@web03 ~]#

echo -n test
test[root@web03 ~]#
# -n参数会让输出的字符不自动换行,所以[root@web03 ~] #紧随其后

echo -ne "test\n"
test
## -e参数可以让echo识别换行符,这样就可以自己来控制换行

2. 扩展:"chkconfig: - 30 21"

  • 运行级文件:
    每个被chkconfig管理的服务需要在对应的init.d目录下的脚本加上 两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以 及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么 使用"-"代替运行级。第二行对服务进行描述,可以用"\"跨行注释。
  • 如何增加一个服务:
    1. 服务脚本必须存放在/etc/ini.d/目录下;
    2. chkconfig --add servicename
      在chkconfig工具服务列表中增加此服务,此时服务会被在 /etc/rc.d/rcN.d中赋予K/S入口了;
    3. chkconfig --level 35 mysqld on
      修改服务的默认启动等级。
vim /etc/init.d/nginx
chmod 755 /etc/init.d/nginx
# 记得把启动脚本放入init.d目录后,赋予此文件755权限
chkconfig --add nginxd

ls /etc/rc.d/rc*.d/*nginx*
/etc/rc.d/rc0.d/K15nginx  /etc/rc.d/rc3.d/K15nginx  /etc/rc.d/rc6.d/K15nginx
/etc/rc.d/rc1.d/K15nginx  /etc/rc.d/rc4.d/K15nginx
/etc/rc.d/rc2.d/K15nginx  /etc/rc.d/rc5.d/K15nginx
# 因为目前没有用chkconfig设置启动level,所以全部是关闭
# 上面的文件都是/etc/init.d/nginx的软链接文件

chkconfig nginxd on
ls /etc/rc.d/rc*.d/*nginx*
/etc/rc.d/rc0.d/K15nginx  /etc/rc.d/rc3.d/S85nginx  /etc/rc.d/rc6.d/K15nginx
/etc/rc.d/rc1.d/K15nginx  /etc/rc.d/rc4.d/S85nginx
/etc/rc.d/rc2.d/S85nginx  /etc/rc.d/rc5.d/S85nginx
## 用chkconfig service on了以后,默认把2345level启动了

3. 扩展:daemon的由来

# daemon是在fuction中的一个函数
# 启动脚本中的". /etc/init.d/function",代表着初始化function脚本
# daemon函数用来在后台运行程序

man daemon
......
NAME
       daemon - run in the background
......

vim /etc/init.d/function
*****************************************
daemon() {
        # Test syntax.
        local gotbase= force= nicelevel corelimit
        local pid base= user= nice= bg= pid_file=
        local cgroup=
        nicelevel=0
        while [ "$1" != "${1##[-+]}" ]; do
          case $1 in
            '')    echo $"$0: Usage: daemon [+/-nicelevel] {program}"
                   return 1;;
            --check)
                   base=$2
                   gotbase="yes"
                   shift 2
                   ......省略......
                   ;;
            *)     echo $"$0: Usage: daemon [+/-nicelevel] {program}"
                   return 1;;
          esac
        done
*****************************************

Contents