1. 程式人生 > >Nginx 熱部署和日誌切割,你學會了嗎?

Nginx 熱部署和日誌切割,你學會了嗎?

上篇文章,我們已經安裝好 Nginx,並且配置好 Nginx 檔案後,這個時候我就需要操作 Nginx 的命令行了,這篇文章主要講解 Nginx 命令列相關知識,並通過日常遇到的熱部署、切割日誌檔案場景來熟悉 Nginx 命令列操作。

推薦閱讀:Nginx 瞭解一下?

Nginx 命令列

  1. 格式:nginx -s stop
  2. 幫助:-? -h
  3. 使用指定的配置檔案:-c
  4. 指定配置指令:-g (用途是覆蓋配置檔案中的指令)
  5. 指定執行目錄:-p
  6. 傳送訊號:-s(立刻停止服務:stop,優雅的停止服務:quit,重新配置檔案:reload,重新開始記錄日誌檔案:reopen)
  7. 測試配置檔案是否有語法錯誤:-t -T
  8. 列印 nginx 的版本資訊、編譯資訊等:-v -V

Nginx 命令和大部分的 Linux 的命令很相似,都是 nginx 加基本指令,再加指令相關的引數。預設情況下 nginx 會去尋找之前執行 configure 命令時指定位置的配置檔案,但是可以通過 -c 來指定配置檔案,並且可以通過 -g 來指定配置指令。

nginx 去操作執行中程序的方法一般是通過傳送訊號,可以通過 linux 通用的 kill 命令,也可以用 nginx 的 -s 命令來發送訊號。

接下來,讓我們通過幾個栗子來熟悉 Nginx 的命令列操作。

過載配置檔案

配置檔案預設是在安裝目錄的 conf 檔案下,檔名為 nginx.conf,我們可以開啟看一下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

假如我們需要開啟 gzip 壓縮,我們可以把它前面的註釋去掉,當我們在修改完 nginx 配置檔案後,我們可以通過 nginx 的命令 ./nginx -s reload 重啟 nginx 服務。

Nginx 熱部署

當從老版本替換為新版本的 nginx 的時候,如果不熱部署的話,會需要取消 nginx 服務並重啟服務才能替換成功,這樣的話會使正在訪問的使用者在斷開連線,所以為了在不影響使用者的體驗下進行版本升級,就需要熱部署來升級版本。

接下來,讓我們一起進行一次熱部署吧。

因為進行升級主要是更換二進位制檔案,所以在升級前先備份舊的二進位制檔案。

# 備份舊版本的 nginx 二進位制檔案
mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old

然後下載最新版本的 nginx,解壓後進行編譯,再把編譯好的最新版本的 nginx 二進位制檔案拷貝到安裝目錄下的 sbin 目錄下。

# 到官網下載最新版本的 nginx
wget http://nginx.org/download/nginx-1.17.2.tar.gz
# 解壓
tar -xzvf nginx-1.17.2.tar.gz
cd nginx-1.17.2
./configure --prefix=/usr/local/nginx
# 編譯
make
# 替換舊的 nginx 的執行程式
cp -r /usr/local/nginx-1.16.1/objs/nginx /usr/local/nginx/sbin/ -f

通過 ps -ef | grep nginx 來檢視 nginx 執行狀況:

[root@wupx sbin]# ps -ef | grep nginx 
root      1752     1  0 20:39 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    1783  1752  0 20:41 ?        00:00:00 nginx: worker process
root      1787     1  0 20:41 ?        00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz
root      4357  1708  0 21:00 pts/2    00:00:00 grep --color=auto nginx

可以看到目前啟動的 nginx 的 PID 為 1752,下面需要給正在執行的 nginx 的 master 程序傳送訊號,告訴它我們要進行熱部署了。

# 傳送 USR2 訊號給舊版本主程序號,使 nginx 的舊版本停止接收請求,用 nginx 新版本接替
kill -USR2 1752

再通過 ps -ef | grep nginx 來檢視 nginx 執行狀況:

[root@wupx sbin]# ps -ef | grep nginx 
root      1752     1  0 20:39 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    1783  1752  0 20:41 ?        00:00:00 nginx: worker process
root      1787     1  0 20:41 ?        00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz
root      4391  1752  0 21:02 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    4392  4391  0 21:02 ?        00:00:00 nginx: worker process
root      4394  1708  0 21:07 pts/2    00:00:00 grep --color=auto nginx

這個時候我們需要給老的 nginx 傳送訊號,告訴老的 nginx 請優雅的關閉所有的 worker 程序。

# 傳送 WINCH 訊號到舊的主程序,它會通知舊的 worker 程序優雅的關閉,然後退出
kill -WINCH 1752

重新在檢視 nginx 狀態:

[root@wupx sbin]# ps -ef | grep nginx 
root      1752     1  0 20:39 ?        00:00:00 nginx: master process ./sbin/nginx
root      1787     1  0 20:41 ?        00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz
root      4391  1752  0 21:02 ?        00:00:00 nginx: master process ./sbin/nginx
nobody    4392  4391  0 21:02 ?        00:00:00 nginx: worker process
root      4402  1708  0 21:08 pts/2    00:00:00 grep --color=auto nginx

也可以發現老的 nginx maser 程序還存在,它的意義是:如果存在問題,需要退回到老版本中,我們可以給它傳送 reload 命令,讓他重新把 worker 程序拉起來、把新版本關掉。保留在這裡方便我們做版本回退。

如果要退出保留的 master 程序,可以通過 kill -QUIT 命令來完成:

# 傳送 QUIT 訊號到舊的主程序,它會退出保留的 master 程序
kill -QUIT 1752

執行完後,1752 程序退出,通過 netstat lntup 可以看到 80 埠已經被 4391 程序監聽了(新版本 nginx 的程序)。

到此為止,我們就完成了 nginx 的熱部署。

日誌切割

為了避免日誌檔案過大不方便檢視,因此需要對日誌切割。首先將原先的日誌進行備份:

# 備份原日誌
mv error.log old_error.log

檢視日誌大小:

[root@wupx logs]# ll
total 20
-rw-r--r-- 1 root root 6789 Nov  6 22:28 access.log
-rw-r--r-- 1 root root    5 Nov  6 22:16 nginx.pid
-rw-r--r-- 1 root root 7831 Nov  6 22:28 old_error.log

接下來進行日誌切割:

# 日誌切割
/usr/local/nginx/sbin/nginx -s reopen

再次檢視:

[root@wupx logs]# ll
total 24
-rw-r--r-- 1 nobody root 6789 Nov  6 22:28 access.log
-rw-r--r-- 1 nobody root   60 Nov  6 22:30 error.log
-rw-r--r-- 1 root   root    5 Nov  6 22:16 nginx.pid
-rw-r--r-- 1 root   root 7831 Nov  6 22:28 old_error.log

經過上面的操作,我們就完成了日誌的切割,以上操作只是為了瞭解日誌切割的操作流程,不建議直接生產這麼使用。推薦先寫成一個 shell 指令碼,通過 shell 指令碼去定時執行。

示例指令碼:

#!/bin/bash
LOGS_PATH=/usr/local/nginx/logs/history
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${CUR_LOGS_PATH}/access.log ${LOGS_PATH}/old_access_${YESTERDAY}.log
mv ${CUR_LOGS_PATH}/error.log ${LOGS_PATH}/old_error_${YESTERDAY}.log
## 向 NGINX 主程序傳送 USR1 訊號。USR1 訊號是重新開啟日誌檔案
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

總結

這篇文章主要介紹了 Nginx 命令列相關知識,並介紹了過載配置檔案、Nginx 熱部署、日誌切割等操作,還是需要多實踐操作,實踐出真知。

相關推薦

Nginx 部署日誌切割學會

上篇文章,我們已經安裝好 Nginx,並且配置好 Nginx 檔案後,這個時候我就需要操作 Nginx 的命令行了,這篇文章主要講解 Nginx 命令列相關知識,並通過日常遇到的熱部署、切割日誌檔案場景來熟悉 Nginx 命令列操作。 推薦閱讀:Nginx 瞭解一下? Nginx 命令列 格式:nginx

給多型的python找物件喜歡那一個氣S產品經理學會

快過年了給多型的python找物件,產品經理和設計師有的忙了。說好的放假,產品經理一個字“改”,來來來一起坐下來改吧!說正題,給多型的python找物件,你喜歡那一個,氣S產品經理。開玩笑的,主題是程式碼。主角是程式碼。小編是配角。小編帶你們皮一下,禽獸式的學習。 目標 多型 面向物件三大

降取樣過取樣欠取樣子取樣下采樣上取樣學會?【總結】

降取樣:2048HZ對訊號來說是過取樣了,事實上只要訊號不混疊就好(滿足尼奎斯特取樣定理),所以可以對過取樣的訊號作抽取,即是所謂的“降取樣”。在現場中取樣往往受具體條件的限止,或者不存在300HZ的取樣率,或除錯非常困難等等。若R>>1,則Rfs/2就遠大於音

JFinal新版sql模板有兩種Template的呼叫方式學會

最近JBolt專案中升級到了最新版JFinal,很平滑,改了個版本號輕鬆完成。 昨天,突然想起JFinal的新版ChangeLo

Java多線程並發鎖原子操作真的

我想 將不 實驗 jdk1 一段 前言 並發 alt 一個 前言 對於Java多線程,接觸最多的莫過於使用synchronized,這個簡單易懂,但是這synchronized並非性能最優的。今天我就簡單介紹一下幾種鎖。可能我下面講的

Python :Pycharm初始建立專案環境搭建足夠

Pycharm確實是一個非常不錯的Python開發IDE,尤其對於初學者而言。 開啟新建專案 1.選擇新建一個Pure Python專案,新建專案路徑可以在Location處選擇。 2.Project Interpreter部分是選擇新建專案所依賴的python庫,第一

大資料的三大趨勢三大困境都知道?此文全解!!!

一家公司的數字化改造應該從清晰的趨勢和障礙出發,更好地規劃出一條通往其所尋求業務成果的路線。考慮到這一點,以下是我們關注的三大資料趨勢,以及在數字時代可能出現在企業和成功之間的三大困境。 三大趨勢 1.真實的機器學習  2018年6月2日,由雲豆資料主辦的《大資料時代趨

Java多執行緒併發鎖原子操作真的瞭解

前言                 對於Java多執行緒,接觸最多的莫過於使用synchronized,這個簡單易懂,但是這synchronized並非效能最優的。今天我就簡單介紹一下幾種鎖。可能我下面講的時候其實很多東西不會特別深刻,最好的方式是自己做實驗,把各種場景在

CentOS7防火墻(Firewalld)

targe ref net blank aliyun 官方 wal http edge 阿裏雲官方教程: https://help.aliyun.com/knowledge_detail/41317.html 百度參考的牛人教程(推薦): http://www.111c

【全民充電節】APP又上新福利發現

充電節 優惠 APP 安卓 終於熬過了寒冬,盼到了溫暖的3月~天氣漸漸暖和了了,小夥伴們學習的熱情也蹭蹭蹭的高漲起來了呢! 趕著這波學習的熱潮,火熱熱的“全民充電節”也開始啦~戳我去活動會場>>> 同時我們“51CTO學院”的APP也悄然發生了些變化喲~細心的同學發現了沒?

一線互聯網常見的 14 個 Java 面試題顫抖程序員

don 讀取 需要 內存模型 對象 str 資源 阻塞 問題 跳槽不算頻繁,但參加過不少面試(電話面試、face to face 面試),面過大 / 小公司、互聯網 / 傳統軟件公司,面糊過(眼高手低,缺乏實戰經驗,掛掉),也面過人,所幸未因失敗而氣餒,在此過程中不斷查缺補

小程序帶給互聯網創業者們的商機抓住|極限工坊淘小咖

fff 這也 小程序 人生 項目 img src 公眾 城市 坐擁11億強大用戶基數的微信,騰訊不止單純的讓它作為一個聊天工具,在公眾號之後到小程序上線,騰訊的態度很明確,小程序就是為了微信商業化而生的一個工具。 微信目前幾乎是每家每戶都在用,而小程序將會把這些人利用起來達

一線網際網路常見的14個Java面試題顫抖程式設計師

跳槽不算頻繁,但參加過不少面試(電話面試、face to face面試),面過大/小公司、網際網路/傳統軟體公司,麵糊過(眼高手低,缺乏實戰經驗,掛掉),也面過人,所幸未因失敗而氣餒,在此過程中不斷查缺補漏,養成了踏實、追本溯源、持續改進的習慣,特此將自己經歷過、構思過的一些面試題記錄下來,如果答案有問題

MyBatis 延遲載入的三種載入方式深入get

延遲載入   延遲載入對主物件都是直接載入,只有對關聯物件是延遲載入。   延遲載入可以減輕資料庫的壓力,   延遲載入不可是一條SQL查詢多表資訊,這樣構不成延遲載入,會形成直接載入。   延遲載入分為三種類型: 1.直接載入 執行完主物件之後,直接執行關聯物件。 2.侵入式載入 在執行主物

MyBatis 延遲加載的三種加載方式深入get

ble 必須 關聯 數據 之前 默認值 種類型 加載 節點 延遲加載   延遲加載對主對象都是直接加載,只有對關聯對象是延遲加載。   延遲加載可以減輕數據庫的壓力,   延遲加載不可是一條SQL查詢多表信息,這樣構不成延遲加載,會形成直接加載。   延遲加載分為三種類型:

Python將被納入高考小學生都在學

Python 這幾年的火熱,離不開人工智慧和機器學習。如果說 2017 年有一門最火“外語”,那一定是 Python。現在,Python 的這把火已經燒到了程式設計師的圈子外。 根據國務院《新一代人工智慧發展規劃的通知》,可以想見人工智慧教育往低幼滲透的例子只會越來越多。 小學生學 Pyth

Python 中的匿名函式濫用

概念 我們從一個例子引入。 這裡有一個元素為非空字串的列表,按字串最後一個字母將列表進行排序。如果原列表是 ['abc', 'g', 'def'],則結果應該是 ['abc', 'def', 'g']。 很容易得到如下程式碼 我們發現, get_last_element 這個方法比較簡單,並且只用

AG視訊技巧打法瞭解多少學會

AG視訊技巧,網戰【8d9a】。c0m 我覺得百嘉樂不能想得太複雜,說白了,其實就是在兩對(四個)對立的元素裡面進行選擇:莊-閒,連-跳。這兩對矛盾的東西,出現的理論概率都是50%-50%,在百期的資料裡面的偏差極限能達到7:3,千期裡面偏差極限能達到5.5:4.5,萬期裡面基本上就比較均衡了,一般不超過2

AG視訊技巧打法解多少學會

是我 睡覺 10個 不一定 回來 簡單 不足 什麽 心理 AG視訊技巧,網戰【8d9a】。c0m 我覺得百嘉樂不能想得太復雜,說白了,其實就是在兩對(四個)對立的元素裏面進行選擇:莊-閑,連-跳。這兩對矛盾的東西,出現的理論概率都是50%-50%,在百期的數據裏面的偏差極限

工業4.0圍觀大炒作大問題大差距發現

工業4.0這個議題被提出已長達5年之久,如今仍是行業裡炙手可熱的話題。隨著工業 4.0的熱議持續升溫,人們估計工業 4.0 產生的影響將極其巨大。但是要想工業 4.0 能像熱議中那樣全部實現,必須採取相應的行動。 工業4.0的概念為何誕生於德國,絕非偶然。根據德國的經驗,工業4.0的未來實現,基於兩個前提條