# 引入函数库,小数点的作用跟source一样
. /etc/rc.d/init.d/functions
# 引入network的配置文件
. /etc/sysconfig/network
# networking 如果没有启动则退出脚本
[ "$NETWORKING" = "no" ] && exit 0
#定义nginx变量
nginx="/usr/sbin/nginx"
#定义prog变量,把$()的命令结果赋给prog,值为nginx
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
#如果/etc/sysconfig/nginx是文件则引入
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
# 此函数的作用是创建需要的目录及nginx用户
make_dirs() {
#先把nginx版本信息grep过滤,再批量替换一些字符串后赋给变量user,$user的值为nginx
user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
#如果$user不为空
if [ -n "$user" ]; then
# ``里面的替换命令为查找nginx的用户信息,没有则添加用户nginx
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
# for循环$options解析出来的字符串,以空格分组,有多少组循环多少次
for opt in $options; do
# 如果$opt中包含 "-temp-path" 字符串
if [ `echo $opt | grep '.*-temp-path'` ]; then
#这里截取到的字符串为nginx需要的缓存文件夹路径,-f为选择 "=" 右边的字符串,所以是路径
value=`echo $opt | cut -d "=" -f 2`
# 如果该路径不是目录
if [ ! -d "$value" ]; then
# 递归创建目录并把nginx设为目录所有者
mkdir -p $value && chown -R $user $value
fi
fi
done
fi
}
start() {
#nginx没有执行权限就退出,退出状态码为5
[ -x $nginx ] || exit 5
#存放配置文件路径的变量不是文件就退出
[ -f $NGINX_CONF_FILE ] || exit 6
#调用make_dirs()方法
make_dirs
echo -n $"Starting $prog: "
#以系统服务的方式启动nginx
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
#如果启动服务的状态码为0则表示启动成功,创建锁文件
[ $retval -eq 0 ] && touch $lockfile
#返回状态码,退出方法
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
shell script - 分析nginx的启动脚本
于 2018-02-23 23:05:41 首次发布