实现的功能
一:Nginx启动自检功能
二:自检报错,自动进入所在文件的所在行,让运维人员进行修改!
三:文件锁功能使得该脚本只能让系统管理员执行,并保证不能同时执行多次!
四:可适用较好,实现简单的start,status,restart,reload,stop等功能!
脚本的缺点
一:未引用方法,使得该脚本许多地方重复步骤较多!
二:文件路径变量设置不是很全面!
#!/bin/sh
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
Err=/scripts/nginx-log.txt
Line=`awk -F"[ :]" 'NR==1{print $(NF)}' $Err`
File_Name=`awk -F"[ :]" 'NR==1{print $(NF-1)}' $Err`
File=/var/run/nginx.pid
if [ ! $USER == "root" -a $UID -eq 0 ];then
action "用户$USER 对该脚本没有使用权限!" /bin/false
exit
fi
#文件锁
Socket=/scripts/file-socket.txt
if [ -f $Socket ];then
action "已经有人在运行次脚本,该脚本不能同时运行多个!"
exit
fi
if [ $# -ne 1 ];then
action "请输入(start|stop|restart|status|reload)中的一种!" /bin/true
exit
fi
touch $Socket &>/dev/null
case $1 in
start)
if [ -f $File ];then
action "nginx 服务已经在运行中。。。。" /bin/true
else
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
if [ $? -eq 0 ];then
action "Nginx启动成功!" /bin/true
else
action "Nginx启动失败!" /bin/false
fi
else
/usr/sbin/nginx -t &>$Err
action "启动nginx时在文件$File_Name 的第$Line 行出现错误!" /bin/false
read -p "是否进入nginx配置文件并修改" change
case $change in
Y|YES|y|yes)
vim +$Line /etc/nginx/nginx.conf
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
if [ $? -eq 0 ];then
action "Nginx启动成功!" /bin/true
else
action "Nginx启动失败!" /bin/false
fi
else
action "修改失败,语法还是错误!" /bin/false
fi
;;
N|NO|n|no)
action "已放弃修改!" /bin/true
;;
*)
action "请输入n|N|no|NO|YES|Y|y 中的一种!" /bin/false
esac
fi
fi
;;
stop)
if [ -f $File ];then
/usr/sbin/nginx -s stop &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "Nginx停止成功!" /bin/true
else
action "Nginx停止失败!" /bin/false
fi
else
action "nginx服务已经停止!" /bin/true
fi
;;
reload)
if [ -f $File ];then
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx -s reload &>/dev/null
if [ $? -eq 0 ];then
action "Nginx加载成功!" /bin/true
else
action "Nginx加载失败!" /bin/false
fi
else
/usr/sbin/nginx -t &>$Err
action "启动nginx时在文件$File_Name 的第$Line 行出现错误!" /bin/false
read -p "是否进入配置文件进行修改?" change1
case $change1 in
Y|y|yes|YES)
vim +$Line /etc/nginx/nginx.conf
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "Nginx重载成功!" /bin/true
else
action "Nginx重载失败!" /bin/false
fi
else
action "修改失败,语法还是错误!" /bin/false
fi
;;
N|n|no|NO)
action "已放弃修改!" /bin/true
;;
*)
action "请输入n|N|no|NO|YES|Y|y 中的一种!" /bin/false
esac
fi
else
action "Nginx未启动!" /bin/false
fi
;;
restart)
if [ -f $File ];then
/usr/sbin/nginx -s stop &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "Nginx停止成功!" /bin/true
else
action "Nginx停止失败!" /bin/false
fi
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "重启成功" /bin/true
else
action "重启失败!" /bin/false
fi
else
/usr/sbin/nginx -t &>$Err
action "启动nginx时在文件$File_Name 的第$Line 行出现错误!" /bin/false
read -p "是否进入配置文件进行修改?" change2
case $change2 in
y|Y|YES|yes)
vim +$Line /etc/nginx/nginx.conf
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "nginx重启成功!" /bin/true
else
action "nginx重启失败!" /bin/false
fi
else
action "修改失败,语法还是错误!" /bin/false
fi
;;
N|NO|n|no)
action "已放弃修改!" /bin/true
;;
*)
action "请输入n|N|no|NO|YES|Y|y 中的一种!" /bin/false
esac
fi
#/usr/sbin/nginx &>/dev/null
#if [ $? -eq 0 ];then
# action "Nginx重启成功!" /bin/true
#else
# action "Nginx重启失败!" /bin/false
#fi
else
action "Nginx未启动!" /bin/false
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
sleep 2
if [];then
action "nginx重启成功!" /bin/true
else
action "nginx重启失败!" /bin/false
fi
else
/usr/sbin/nginx -t &>$Err
action "启动nginx时在文件$File_Name 的第$Line 行出现错误!" /bin/false
read -p "是否进入配置文件进行修改?" change3
case $change3 in
y|Y|YES|yes)
vim +$Line /etc/nginx/nginx.conf
/usr/sbin/nginx -t &>/dev/null
if [ $? -eq 0 ];then
/usr/sbin/nginx &>/dev/null
sleep 2
if [ $? -eq 0 ];then
action "nginx重启成功!" /bin/true
else
action "nginx重启失败!" /bin/false
fi
else
action "修改失败,语法还是错误!" /bin/false
fi
;;
N|NO|n|no)
action "已放弃修改!" /bin/true
;;
*)
action "请输入n|N|no|NO|YES|Y|y 中的一种!" /bin/false
esac
fi
#/usr/sbin/nginx &>/dev/null
#if [ $? -eq 0 ];then
# action "Nginx重启成功!" /bin/true
#else
# action "Nginx重启失败!" /bin/false
#fi
fi
;;
status)
if [ -f $File ];then
action "Nginx正在运行!" /bin/true
else
action "Nginx为正常运行!" /bin/true
fi
;;
*)
action "Please input: (start|stop|restart|status|reload)" /bin/true
esac
rm -rf $Socket &>/dev/null