nginx基本使用系列(二)_ubuntu14.04下源碼安裝配置自啟動腳本

上文中利用了

sudo ./configure --prefix=/usr/local/nginx

來編譯安裝nginx源碼包,這樣安裝所有的nginx源碼會被安裝在/usr/local/nginx文件下.每次啟動都需要通過/user/local/nginx/sbin/nginx來啟動,參考通過Ubuntu下通過apt-get安裝,會配置自啟動腳本,我們也在通過源碼包安裝的情況下,配置自己的自啟動腳本.

配置nginx開機服務(wù)

默認這么安裝好以后每次檢查配置野瘦、重啟之類的操作略麻煩选脊,所以我們模仿 Ubuntu 14.04 官方源麦乞,給系統(tǒng)設(shè)置個 nginx 服務(wù),方便我們檢查配置阳啥、啟動重啟關(guān)閉 Nginx 以及開機自動啟動 Nginx.

sudo vim /etc/init.d/nginx

插入如下內(nèi)容:

#!/bin/sh
### BEGIN INIT INFO
# Provides:       nginx
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
##### nginx啟動腳本
#####DAEMON=/usr/sbin/nginx
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
# Include nginx defaults if available
if [ -r /etc/default/nginx ]; then
        . /etc/default/nginx
fi
test -x $DAEMON || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions
# Try to extract nginx pidfile
####修改配置文件目錄
####PID=$(cat /etc/nginx/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
PID=$(cat /usr/local/nginx/conf/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)

##### -z str1:當串的長度為0時為真(空串)
if [ -z "$PID" ]
then
        PID=/run/nginx.pid
fi
# Check if the ULIMIT is set in /etc/default/nginx

#### -n str1:當串的長度大于0時為真(串非空) 
if [ -n "$ULIMIT" ]; then
        # Set the ulimits
        ulimit $ULIMIT
fi

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \
                $DAEMON_OPTS 2>/dev/null \
                || return 2
}

test_nginx_config() {
        $DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PID --name $NAME
        RETVAL="$?"
        sleep 1
        return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
        start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME
        return 0
}

#
# Rotate log files
#
do_rotate() {
        start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME
        return 0
}

#
# Online upgrade nginx executable
#
# "Upgrading Executable on the Fly"
# http://nginx.org/en/docs/control.html
#
do_upgrade() {
        # Return
        #   0 if nginx has been successfully upgraded
        #   1 if nginx is not running
        #   2 if the pid files were not created on time
        #   3 if the old master could not be killed
        if start-stop-daemon --stop --signal USR2 --quiet --pidfile $PID --name $NAME; then
                # Wait for both old and new master to write their pid file
                while [ ! -s "${PID}.oldbin" ] || [ ! -s "${PID}" ]; do
                        cnt=`expr $cnt + 1`
                        if [ $cnt -gt 10 ]; then
                                return 2
                        fi
                        sleep 1
                done
                # Everything is ready, gracefully stop the old master
                if start-stop-daemon --stop --signal QUIT --quiet --pidfile "${PID}.oldbin" --name $NAME; then
                        return 0
                else
                        return 3
                fi
        else
                return 1
        fi
}

case "$1" in
        start)
                [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
                do_start
                case "$?" in
                        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                esac
                ;;
        stop)
                [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
                do_stop
                case "$?" in
                        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                esac
                ;;
        restart)
                log_daemon_msg "Restarting $DESC" "$NAME"
                # Check configuration before stopping nginx
                if ! test_nginx_config; then
                        log_end_msg 1 # Configuration error
                        exit 0
                fi
                do_stop
                case "$?" in
                        0|1)
                                do_start
                                case "$?" in
                                        0) log_end_msg 0 ;;
                                        1) log_end_msg 1 ;; # Old process is still running
                                        *) log_end_msg 1 ;; # Failed to start
                                esac
                                ;;
                        *)
                                # Failed to stop
                                log_end_msg 1
                                ;;
                esac
                ;;
        reload|force-reload)
                log_daemon_msg "Reloading $DESC configuration" "$NAME"
                # Check configuration before reload nginx
                #
                # This is not entirely correct since the on-disk nginx binary
                # may differ from the in-memory one, but that's not common.
                # We prefer to check the configuration and return an error
                # to the administrator.
                if ! test_nginx_config; then
                        log_end_msg 1 # Configuration error
                        exit 0
                fi

                do_reload
                log_end_msg $?
                ;;
        configtest|testconfig)
                log_daemon_msg "Testing $DESC configuration"
                test_nginx_config
                log_end_msg $?
                ;;
        status)
                status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
                ;;
        upgrade)
                log_daemon_msg "Upgrading binary" "$NAME"
                do_upgrade
                log_end_msg 0
                ;;
        rotate)
                log_daemon_msg "Re-opening $DESC log files" "$NAME"
                do_rotate
                log_end_msg $?
                ;;
        *)
                echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2
                exit 3
                ;;
esac
:
  • 注意設(shè)置好nginx的啟動路徑 DAEMON=/usr/sbin/nginx;
  • 注意設(shè)置nginx.conf配置文件路徑,并且nginx.conf配置文件里面的pid路徑,以及其他日志文件的路徑;
  • 和apt-get官方啟動腳本相比,####為修改以及備注理解部分

設(shè)置文件權(quán)限并增加到系統(tǒng)服務(wù)

sudo chmod +x ./nginx
sudo update-rc.d nginx defaults

nginx啟動 關(guān)閉 重啟

sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx restart

啟動腳本涉及的命令參考:
ulimit -n 修改:http://blog.csdn.net/yangzhenzhen/article/details/8905846
linux shell之if_用if做判斷:http://blog.csdn.net/crazyhacking/article/details/10182563
用start-stop-daemon啟動Nginx:http://blog.csdn.net/csfreebird/article/details/8181337

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市连舍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泡仗,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猜憎,死亡現(xiàn)場離奇詭異娩怎,居然都是意外死亡,警方通過查閱死者的電腦和手機胰柑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門截亦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柬讨,你說我怎么就攤上這事崩瓤。” “怎么了踩官?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵却桶,是天一觀的道長。 經(jīng)常有香客問我蔗牡,道長颖系,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任辩越,我火速辦了婚禮嘁扼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黔攒。我一直安慰自己偷拔,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布亏钩。 她就那樣靜靜地躺著,像睡著了一般欺旧。 火紅的嫁衣襯著肌膚如雪姑丑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天辞友,我揣著相機與錄音栅哀,去河邊找鬼。 笑死称龙,一個胖子當著我的面吹牛留拾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲫尊,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼痴柔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疫向?” 一聲冷哼從身側(cè)響起咳蔚,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤豪嚎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谈火,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侈询,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年糯耍,在試婚紗的時候發(fā)現(xiàn)自己被綠了扔字。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡温技,死狀恐怖革为,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荒揣,我是刑警寧澤篷角,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站系任,受9級特大地震影響恳蹲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俩滥,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一嘉蕾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霜旧,春花似錦错忱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崎逃,卻和暖如春掷倔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背个绍。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工勒葱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巴柿。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓凛虽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親广恢。 傳聞我的和親對象是個殘疾皇子凯旋,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,871評論 25 707
  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng),在此記錄下我的查閱學(xué)習(xí)歷程,感謝各位原創(chuàng)作者的無私奉獻 瓦阐! 技術(shù)一點一點積...
    遠航的移動開發(fā)歷程閱讀 11,092評論 12 197
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成蜗侈,其中,內(nèi)核的設(shè)計非常微小和簡潔睡蟋,完成的工作也非常簡單...
    rosekissyou閱讀 10,206評論 5 124
  • 晚間打卡 2016/09/26 27/70 今天我讀了《如何閱讀一本小說》第200-230頁踏幻,完成了閱讀任務(wù)。 福...
    婉琳閱讀 125評論 0 0
  • 你說 你喜歡南方的城市 因為你 來自那里 你說 你喜歡生活在海邊 因為你 向往藍天 你說 你喜歡悠閑和旅行 因為你...
    剪秋風(fēng)閱讀 180評論 0 3