天天看點

Shell實作簡單的管理Nginx服務啟動腳本

實作的功能

一: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           

繼續閱讀