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]#