Nginx 熱部署和日誌切割,你學會了嗎?
上篇文章,我們已經安裝好 Nginx,並且配置好 Nginx 檔案後,這個時候我就需要操作 Nginx 的命令行了,這篇文章主要講解 Nginx 命令列相關知識,並通過日常遇到的熱部署、切割日誌檔案場景來熟悉 Nginx 命令列操作。
推薦閱讀:Nginx 瞭解一下?
Nginx 命令列
- 格式:nginx -s stop
- 幫助:-? -h
- 使用指定的配置檔案:-c
- 指定配置指令:-g (用途是覆蓋配置檔案中的指令)
- 指定執行目錄:-p
- 傳送訊號:-s(立刻停止服務:stop,優雅的停止服務:quit,重新配置檔案:reload,重新開始記錄日誌檔案:reopen)
- 測試配置檔案是否有語法錯誤:-t -T
- 列印 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的未來實現,基於兩個前提條