二进制编译nginx,完成服务启动脚本编写。
二进制编译nginx,完成服务启动脚本编写。
整理一下逻辑思路,要编写一个nginx启动脚本,都需要什么?
nginx服务的操作需要nginx服务的支持,即服务器上必须编译安装了nginx服务
nginx启动脚本说白了就是方便对nginx服务启动、关闭、状态查询、热修改的一个脚本文件
依赖的几个文件
nginx脚本依赖于nginx的二进制系统程序文件:/usr/sbin/nginx(这个在源码编译的时候自定义位置,不过得被Bash找到)
nginx属于网络服务,所以还依赖于网卡信息总文件:/etc/sysconfig/network
nginx服务启动脚本使用了一些Linux内核函数,需要:/etc/rc.d/init.d/functions函数文件
在进行第五步之前,我们还得定义几个变量。
nginx=/usr/sbin/nginx:定义nginx二进制系统文件
prog=`basename $nainx`:定义nginx名
NGINX_CONFIG_FILE:定义nginx主配置文件,用于检测文件是否有语法错误
LOCK_FILE:nginx锁文件
首先得明白,几乎所有得service启动脚本,都时一个case语句+若干函数,用户/管理员在使用service服务时,都时通过传递$1参数,进行选择对服务得不同操作,即:start|stop|restart|reload|status等,所以,nginx也不例外,编辑这些需要使用得函数,然后在case语句里面添加
start函数:启动nginx服务,其实质是从nginx的二进制系统文件启动nginx
stop函数:停止nginx服务,其实质是functions中的killproc函数(这里时不是也可以用killall命令???测试是可以的,不知道有什么问题)
restart函数:重启服务,其实质是stop+start
reload函数:不stop服务的前提下重新加载,其实质是functions中的killproc函数
status函数:查看nginx运行状态,其实质是使用了functions的函数
force_reload函数:强制重新加载,其实质就是stop+start
case语句:接受命令行参数$1,并根据$1值的不同,进行不同的操作
configtest:检测nginx主配置文件是否有语法错误,没有才能进行下一步
下面是编译脚本:
#!/bin/bash
# chkconfig: - 99 20
# description: nginx
. /etc/rc.d/init.d/functions
function show_usage(){
usage="Usage: `basename $0` [ start|stop|restart|reload ]"
echo $usage
exit
}
base_dir=/application/nginx/
[[ $# != 1 ]] && show_usage
nginx=${base_dir}sbin/nginx
case $1 in
start)
[[ `netstat -ntlup|grep nginx|wc -l` > 0 ]] && failure && echo "Nginx is Running!" && exit
echo "Starting Nginx..."
$nginx
([ $? -eq 0 ] && success && echo "Nginx starts successfully!") || (failure && echo "Failed start nginx")
;;
stop)
[[ `netstat -ntlup|grep nginx|wc -l` == 0 ]] && failure && echo "Nginx is NOT running!" && exit
echo "Stopping Nginx..."
$nginx -s stop
([ $? -eq 0 ] && success && echo "Nginx stops successfully!") || (failure && echo "Failed stop nginx!")
;;
restart)
if [[ `netstat -ntlup|grep nginx|wc -l` == 0 ]]; then
echo "Starting Nginx..."
$nginx
[ $? -eq 0 ] && success && echo "Nginx starts successfully!"
else
echo "Stopping Nginx..."
$nginx -s stop
([ $? -eq 0 ] && success && echo "Nginx stops successfully!") || (failure && echo "Failed stop nginx!")
echo "Starting Nginx..."
$nginx
([ $? -eq 0 ] && success && echo "Nginx starts successfully!") || (failure && echo "Failed start nginx")
fi
;;
reload)
[[ `netstat -ntlup|grep nginx|wc -l` == 0 ]] && failure && echo "Nginx is NOT Running!" && exit
$nginx -s reload
[ $? -eq 0 ] && success && echo "Nginx reloads successfully!"
;;
*)
show_usage
;;
esac