二进制编译nginx,完成服务启动脚本编写。

二进制编译nginx,完成服务启动脚本编写。

 

整理一下逻辑思路,要编写一个nginx启动脚本,都需要什么?

nginx服务的操作需要nginx服务的支持,即服务器上必须编译安装了nginx服务

nginx启动脚本说白了就是方便对nginx服务启动、关闭、状态查询、热修改的一个脚本文件

依赖的几个文件

nginx脚本依赖于nginx的二进制系统程序文件:/usr/sbin/nginx(这个在源码编译的时候自定义位置,不过得被Bash找到)

nginx属于网络服务,所以还依赖于网卡信息总文件:/etc/sysconfig/network

nginx服务启动脚本使用了一些Linux内核函数,需要:/etc/rc.d/init.d/functions函数文件

在进行第五步之前,我们还得定义几个变量。

nginx=/usr/sbin/nginx:定义nginx二进制系统文件

prog=`basename $nainx`:定义nginx名

NGINX_CONFIG_FILE:定义nginx主配置文件,用于检测文件是否有语法错误

LOCK_FILE:nginx锁文件

首先得明白,几乎所有得service启动脚本,都时一个case语句+若干函数,用户/管理员在使用service服务时,都时通过传递$1参数,进行选择对服务得不同操作,即:start|stop|restart|reload|status等,所以,nginx也不例外,编辑这些需要使用得函数,然后在case语句里面添加

start函数:启动nginx服务,其实质是从nginx的二进制系统文件启动nginx

stop函数:停止nginx服务,其实质是functions中的killproc函数(这里时不是也可以用killall命令???测试是可以的,不知道有什么问题)

restart函数:重启服务,其实质是stop+start

reload函数:不stop服务的前提下重新加载,其实质是functions中的killproc函数

status函数:查看nginx运行状态,其实质是使用了functions的函数

force_reload函数:强制重新加载,其实质就是stop+start

case语句:接受命令行参数$1,并根据$1值的不同,进行不同的操作

configtest:检测nginx主配置文件是否有语法错误,没有才能进行下一步

下面是编译脚本:

#!/bin/bash

# chkconfig: - 99 20

# description: nginx

. /etc/rc.d/init.d/functions

function show_usage(){

        usage="Usage: `basename $0` [ start|stop|restart|reload ]"

        echo $usage

        exit

}

base_dir=/application/nginx/

[[ $# != 1 ]] && show_usage

 

nginx=${base_dir}sbin/nginx

case $1 in

start)

        [[ `netstat -ntlup|grep nginx|wc -l` > 0 ]] && failure && echo "Nginx is Running!" && exit

        echo "Starting Nginx..."

        $nginx

        ([ $? -eq 0 ] && success && echo "Nginx starts successfully!") || (failure && echo "Failed start nginx")

;;

stop)

        [[ `netstat -ntlup|grep nginx|wc -l` == 0 ]] && failure && echo "Nginx is NOT running!" && exit

        echo "Stopping Nginx..."

        $nginx -s stop

        ([ $? -eq 0 ] && success && echo "Nginx stops successfully!") || (failure && echo "Failed stop nginx!")

 

;;

restart)

        if [[ `netstat -ntlup|grep nginx|wc -l` == 0 ]]; then

                echo "Starting Nginx..."

                $nginx

                [ $? -eq 0 ] && success && echo "Nginx starts successfully!"

        else

                echo "Stopping Nginx..."

                $nginx -s stop

                ([ $? -eq 0 ] && success && echo "Nginx stops successfully!") || (failure && echo "Failed stop nginx!")

                echo "Starting Nginx..."

                $nginx

                ([ $? -eq 0 ] && success && echo "Nginx starts successfully!") || (failure && echo "Failed start nginx")

        fi

;;

reload)

        [[ `netstat -ntlup|grep nginx|wc -l` == 0 ]] && failure && echo "Nginx is NOT Running!" && exit

        $nginx -s reload

        [ $? -eq 0 ] && success && echo "Nginx reloads successfully!"

;;

*)

        show_usage

;;

esac

 

posted @ 2018-09-27 18:30  初于青丝  阅读(220)  评论(0编辑  收藏  举报