利用case实现nginx服务启停控制的脚本分析
作者:当她睡着时
系统:CentOS 7 nginx版本:nginx1.16.0
- 明确需求
利用shell脚本编程中case判断语句实现nginx服务的状态查询、启动、停止、重启。
查询状态:status;启动:start;停止:stop;重启:restart
- 整理思路
- 首先判断nginx的服务状态,实现此步骤可以查pid文件是否存在,若存在即nginx开启,不存在则关闭。Nginx的pid文件存放路径:/usr/local/nginx/logs/nginx.pid
- 开启nginx可以直接执行nginx的文件,即绝对路径下:/usr/local/nginx/sbin/nginx
- 关闭nginx可以直接kill nginx的pid号(pid号存在于pid文件中)
- 重启nginx则首先关闭nginx,再打开nginx,即先kill nginx的pid号,再执行nginx文件。理清思路,开始实验
- 编写代码
- 此处选择case判断语句,则明确其语法格式:
- 首先,touch一个nginx.sh的文件,vim打开编辑它。
- 肯定要写“魔棒”(幻数)啦,即在首行规定解释器: #!/bin/bash
- 写些注释吧,养成习惯,以后团队协作会很轻松的
- 我们把思路中两个文件及路径定义成变量,把nginx的pid文件定义为变量NGINX_PID,把nginx的启动文件定义为变量NGINX_CMD,如下:
- NGINX_CMD=/usr/local/nginx/sbin/nginx
NGINX_PID=/usr/local/nginx/logs/nginx.pid
- 从头分析语法
其中的变量为可传入变量,我们将其定义为$1
条件为status)
执行代码:判断如果pid文件存在,则nginx开启,否则nginx是关闭的。 if [ -e $NGINX_PID ];then
echo “nginx已经启动”
else
echo “nginx没有运行”
fi
;;
以此类推,得到的代码最终为:
case $1 in
status)
if [ -e $NGINX_PID ];then
echo "nginx已经启动"
else
echo "nginx没有运行"
fi
;;
start)
if [ -e $NGINX_PID ];then
echo "nginx已经在运行"
else $NGINX_CMD && echo "nginx启动成功" || echo "nginx启动失败"
fi
;;
stop)
if [ -e $NGINX_PID ];then
kill $(cat $NGINX_PID) && echo "nginx关闭成功" ||echo "nginx关闭失败"
else
echo "nginx没有启动"
fi
;;
restart)
if [ -e $NGINX_PID ];then
$0 stop
$0 start
else
echo "nginx没有启动"
$0 start
fi
;;
*)
echo "请输入start|stop|restart|status"
esac
- 启动测试
- 给sh文件一个执行权限:chmod +x nginx.sh
- 具体操作如下(因我给文件的命名是sh,所以我在此处执行都是third.sh,并不影响,大家将其换为你规定的名字即可)
- 测试没问题后,我们将其放在/etc/init.d下并命名为nginx,以我为例:mv third.sh /etc/init.d/nginx
- 直接执行/etc/init.d/nginx status|start|stop|restart
- 点赞
- 收藏
- 关注作者
评论(0)