Linux服务是可以通过service命令进行控制的,这能使我们在给nginx主进程发送信号以及查看操作nginx服务更加得心应手。在CentOS系统中,Service命令实际是调用/etc/init.d目录下的shell脚本,也就是说,如下两行命令其实等价的
#直接运行脚本
/etc/init.d/network restart
#通过service命令执行脚本
service network restart
在上面的命令中,network是shell脚本的文件名,restart是传递给脚本的参数。因此将nginx添加到系统服务中,只需要在/etc/init.d中编写一个文件名为nginx的shell脚本即可。
接下来执行touch nginx创建一个脚本文件,使用vim /etc/init.d/nginx命令编写一个shell脚本实现nginx服务管理,提供start stop reload restart status 5个参数,具体的脚本代码如下:
#! /bin/bash
#chkconfig:35 85 15
DAEMON=/usr/local/nginx/nginx
PID=/usr/local/nginx/nginx.pid
case "$1" in
start)
echo "Starting nginx daemon..."
$DAEMON && echo "SUCCESS" #开启nginx
;;
stop)
echo "Stopping nginx daemon..."
$DAEMON -s quit && echo "SUCCESS" #从容的停止nginx
;;
reload)
echo "Reloading nginx daemon..."
$DAEMON -s reload && echo "SUCCESS" #平滑重启nginx
;;
restart)
echo "Restarting nginx daemon..."
$DAEMON -s quit #从容的停止nginx
$DAEMON && echo "SUCCESS" #开启nginx
;;
status)
if [ ! -f "$PID" ]; then #因为nginx启动后会生成进程文件nginx.pid,这里通过判断进程文件是否存在,判断nginx是否启动
echo "Nginx is not running..."
else
echo "Nginx is running..."
fi
;;
*)
echo "Usage:service nginx (start|stop|restart|reload|status)"
exit 2
;;
esac
代码解释:
#! /bin.bash:通常写在shell脚本的开头,需要使用特殊表示符号#!定义解释此脚本的shell路径。以上代码的意思是这个脚本将使用bash环境执行。
case语句:case语句通常用于多重分支语句匹配的情况,具体语法如下:
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
;;
esac
case语句必须以case开始 in结尾,中间的变量表示用户输入的字符,每个模式必须以右括号")"结束,双分号";;"结束命令序列,且匹配模式中可以使用方括号表示一个连续的范围,如[0-9],使用树杠符号“|”表示“或”;最后的“*)”是默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列,最后case语句必须以esac结束。