1. 程式人生 > >nginx啟停腳本

nginx啟停腳本

network 無法使用 ice 實現 func ... 服務啟動 結果 簡介

安裝nginx時,源碼包中未帶官方的啟動腳本,也就無法使用service nginxd start這種啟動方式,查了下資料自己寫了一個:

#!/bin/bash

#@version: 0.0.1
#@author: lifafu
#@file: 
#@time: 2017/02/04 08:00
#@company: 

source /etc/profile            #加載系統環境變量
source $HOME/.bash_profile    #加載用戶環境變量
#set -o nounset             #引用未初始化變量時終止執行,也可以set -u
#set -o errexit                #執行任何語句返回非0狀態時終止執行,也可以set -e

# chkconfig: 
- 99 50 # 雖然前面帶#號,是註釋,但要用chkconfig命令註冊開機啟動服務器的話,該句必不可少,格式也不能錯! # 3個chkconfig參數的含義: # x:是指定該腳本在哪個系統啟動級別下運行,比如你需要在3,4,5上運行,那麽第二位就設置成345,我這裏用的是”-”,代表在2,3,4,5上都運行 # y:系統啟動時,服務啟動順序,需要註意的是,有的程序依賴與別的程序的話,啟動順序就要註意了,比如A程序的啟動依賴於B程序的啟動,那麽A程序的這個值一定要比B程序大 # z:系統終止時,服務終止順序 # description: Nginx is a high-performance web and proxy server. # 該句也必不可少,理由同上,你程序的描述和簡介,而非本啟動腳本 #設置變量 nginxd
=/usr/local/nginx/sbin/nginx nginx_config=/usr/local/nginx/conf/nginx.conf nginx_pid=/usr/local/nginx/logs/nginx.pid nginx_lock=/var/lock/subsys/nginx #保存退出狀態的變量,初始值為0(在linux一般0表示成功,表示OK,非0表示異常,不OK) RETYAL=0 # 設置程序名稱 prog="nginx" # Source function library.在當前shell中運行的函數庫文件 # 在functions中定義了很多函數,在這裏可以調用,系統提供的函數文件,這裏面實現了很多函數和環境變量,比如start的時候,紅色的字顯示OK就是這個文件的功勞 .
/etc/rc.d/init.d/functions # Source network configuration.加載網絡配置 . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # 定義啟動函數 start() { # 判斷程序是否存在,否則異常退出 [ -x $nginxd ] || { echo “FATAL: No such programme”;exit 4; } # 判斷配置文件是否存在,否則異常退出 [ -f $nginx_config ] || { echo “FATAL:Config file does not exist”;exit 6; } # 判斷程序是否運行,否則異常退出 if [ -e $nginx_pid ];then echo "nginx already running...." exit 1 fi # 判斷lock文件是否存在,否則異常退出 if [ -e $nginx_lock ];then echo "nginx lock file does exist...." exit 1 fi # 顯示信息,依賴於. /etc/rc.d/init.d/functions echo -n $"Starting $prog:" # 創建pid文件夾 dir=$(dirname $nginx_pid) [ -d $dir ] || mkdir -p $dir # 調用functions裏的daemon函數來啟動nginx,daemon()函數主要用於希望脫離控制臺,以守護進程形式在後臺運行的程序 daemon --pidfile $nginx_pid $nginxd -c ${nginx_config} # 把daemon函數調用的結果保存到RETVAL裏 RETVAL=$? echo # 判斷RETVALR值,如果是0執行成功,則生成鎖文件,鎖文件主要用來判斷程序是否運行 [ $RETVAL = 0 ] && touch $nginx_lock #終止函數,並返回$RETVAL的值,通常用於函數的結束, 本身這段代碼也是個函數,所以我們也要返回,返回RETVAL的值 return $RETVAL } # 定義停止函數 stop() { echo -n $"Stoping $prog:" #killproc也在. /etc/rc.d/init.d/functions裏面定義 killproc -p $nginx_pid $prog RETVAL=$? echo [ $RETVAL = 0 ] && rm -f $nginx_lock $nginx_pid } reload() { echo -n $"Reloading $prog:" #kill -HUP `cat ${nginx_pid}` killproc -p $nginx_pid $prog -HUP RETVAL=$? echo } #See how we were called. case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; #status在. /etc/rc.d/init.d/functions裏有定義 status) status $prog RETVAL=$? ;; #輸入其他內容提示以下內容 *) echo $"Usage:$prog{start|stop|restart|reload|status|help}" exit 1 esac exit $RETVAL

保存為nginxd,復制到/etc/init.d/中並賦予執行權限就可以使用service nginxd start等命令了;

如果需要加入開機啟動:chkconfig --add nginxd;chkconfig nginxd on;

啟停程序也可以使用類似的方式自己編寫啟動腳本,不過這種方式還是有缺陷,就是必須使用root用戶運行這類腳本。

nginx啟停腳本