實作的功能
一: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