nginx自动启动脚本

时间:2021-09-03 06:01:23

nginx自动启动脚本

环境准备提示:

启动服务命令为:/application/nginx/sbin/nginx
停止服务命令为: /application/nginx/sbin/nginx -s stop
请用case语句开发脚本,以实现Nginx服务启动及关闭的功能,具体脚本命令为/etc/init.d/nginxd {status|start|stop|restart}

 

    如果读者对Ngnix环境还不是很熟悉,那么请参考跟老男孩学\<<Linux运维:Web集群实战>>第5章的内容。
参考资料:
https://blog.51cto.com/398528/2053566

# nginx安装

cd /opt/
wget https://ftp.pcre.org/pub/pcre/pcre-8.36.tar.gz
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make && make install

cd /opt/
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zxvf nginx-1.12.2.tar.gz
useradd nginx -s /sbin/nologin -M
yum -y install pcre-devel
cd nginx-1.12.2
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.12.2 --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/pcre-8.36
make && make install
ln -s /application/nginx-1.12.2 /application/nginx
/application/nginx/sbin/nginx -t
启动
/application/nginx/sbin/nginx
查看端口
netstat -lnt

ps -ef|grep nginx

反查
lsof -i :8080

nginx主页文件所在位置
/application/nginx/conf/nginx.conf

---------------------------------------------------------------------------------------------------------------------
解题思路:
1 )    先判断Ngnix的PID文件是否存在(Nginx服务正常启动后PID文件就会存在),如果不存在,即表示Nginx没有运行,则运行Nginx服务的启动命令
(可以把此部分写成start函数)。待要停止时,如果PID存在,就运行Nginx服务停止命令,否则就不运行停止命令(可以把此部分写成stop函数)。
2 ) 通过脚本传参start或stop等,通过case语句获取参数进行判断。
3 ) 为了看起来更专业,这里采用前文讲解的系统函数functions中的action函数。
4 ) 对函数及命令运行的返回值进行处理,使脚本看起来更专业、规范。
5 ) 通过chkconfig来管理Nginx脚本,实现开机自动启。

cat >/etc/init.d/nginxd<<"EOF"
#!/bin/bash
# chkconfig: 2345 40 98
# dectiption: Start/Stop Nginx server
path="/application/nginx/sbin"
pid="/application/nginx/logs/nginx.pid"
RETVAL=0     # 设定RETVAL为0,作为返回值变量。
. /etc/init.d/functions

# start
function usage(){
    echo $"`basename $0` {status|start|stop|restart}"
    exit 1
}

function status(){
    if [[ -f $pid ]]; then
        echo "nginx is running..."
    else
        echo "nginx is not running"
    fi
    exit $RETVAL
}

function start(){
    if [ ! -f $pid ]; then
        $path/nginx
        RETVAL=$?
        if [[ $RETVAL -eq 0 ]]; then
            action "nginx is started" /bin/true
        else
            action "nginx is started" /bin/false
            return RETVAL
        fi
    else
        echo "nginx is running..."
        return 0
    fi
}

function stop(){
    if [[ -f $pid ]]; then
        $path/nginx -s stop
        RETVAL=$?
        if [[ $RETVAL -eq 0 ]]; then
            action "nginx is stopped" /bin/true
            return $RETVAL
        else
            action "nginx is stopped" /bin/false
            return $RETVAL
        fi
    else
        echo "nginx is no running"
        return $RETVAL
    fi
}

case "$1" in
    start )
        start
        RETVAL=$?
        ;;
    stop )
        stop
        RETVAL=$?
        ;;
    restart )
        stop
        sleep 3
        start
        RETVAL=$?
        ;;
    status )
        status
        RETVAL=$?
        ;;
    * )
        usage
esac
exit $RETVAL
EOF
chmod +x /etc/init.d/nginxd 

[root@db nginx-1.12.2]# /etc/init.d/nginxd status
nginx is running...
[root@db nginx-1.12.2]# /etc/init.d/nginxd stop
nginx is stopped                                           [  OK  ]
[root@db nginx-1.12.2]# /etc/init.d/nginxd status
nginx is not running
[root@db nginx-1.12.2]# /etc/init.d/nginxd start
nginx is started                                           [  OK  ]
[root@db nginx-1.12.2]# /etc/init.d/nginxd stop
nginx is stopped                                           [  OK  ]
[root@db nginx-1.12.2]# /etc/init.d/nginxd restart
nginx is no running
nginx is started                                           [  OK  ]
[root@db nginx-1.12.2]# /etc/init.d/nginxd restart
nginx is stopped                                           [  OK  ]
nginx is started                                           [  OK  ]
[root@db nginx-1.12.2]#