1. 程式人生 > >nginx信號量

nginx信號量

日誌文件 proc roc 但是 linux中 worker .html 觀察 日誌

nginx信號說明相關說明

信號名稱 作用
TERM,INT 快速關閉
QUIT 從容關閉
HUP 重新加載配置,用新的配置開始新的工作進程,從容關閉舊的工作進程
USR1 重新打開日誌文件
USR2 平滑升級可執行程序
WINCH 從容關閉工作進程

hup信號優雅重啟

a.html

<html>
<h>這裏是a.html文件</h>
<script>
window.location.href='./';
</script>
</html>

index.html

<html>
<h>這裏是index.html文件</h>
<script>
window.location.href='./';
</script>
</html>

查看當前nginx的配置文件

server{
        listen 80;
        server_name localhost;
        root /Users/lidong/www;
        index  index.html index.htm;
        access_log /Users/lidong/wwwlogs/access.log;
        error_log /Users/lidong/wwwlogs/error.log;
}

修改nginx的配置文件,將nginx設置為默認讀取a.html

server{
        listen 80;
        server_name localhost;
        root /Users/lidong/www;
        index a.html index.html index.htm;
        access_log /Users/lidong/wwwlogs/access.log;
        error_log /Users/lidong/wwwlogs/error.log;
}
ps aux|grep nginx
lidong            5019   0.0  0.0  4339176   1136   ??  S    11:16上午   0:00.01 nginx: worker process  
lidong             352   0.0  0.0  4339176   1480   ??  S    五08上午   0:00.05 nginx: master process /usr/local/opt/nginx/bin/nginx -g daemon off;  
lidong            5284   0.0  0.0  4277252    824 s000  S+    2:04下午   0:00.01 grep nginx

通過ps命令得到nginx的master進程id為352,通過hup信號重啟配置

kill -HUP 352

打開瀏覽器不斷觀察發現使用信號HUP後會自動的跳轉到a.html,我們並沒有重啟,而且發現不是立馬的跳轉是過幾秒後跳轉的,這就是優雅的重新讀取nginx的配置文件,從容的關閉舊的進程。

USR1重讀日誌


server{
        listen 80;
        server_name localhost;
        root /Users/lidong/www;
        index  index.html index.htm;
        access_log /Users/lidong/wwwlogs/access.log;
        error_log /Users/lidong/wwwlogs/error.log;
}
刷新http://localhost/index.html 頁面

查看日誌情況
QiongdeMacBook-Pro:wwwlogs lidong$ ls -l
total 80
-rw-r--r--  1 lidong  staff  16201  3 30 14:36 access.log
QiongdeMacBook-Pro:wwwlogs lidong$ mv access.log access.log.bak
QiongdeMacBook-Pro:wwwlogs lidong$ ls -l
total 88
-rw-r--r--  1 lidong  staff  16410  3 30 14:42 access.log.bak

從上面可以看出來雖然改變了log日誌文件的名稱,但是log日誌還是在寫入,出現這問題的原因linux中文件識別是以文件node的id來的。

使用USR1信號用再次刷新
QiongdeMacBook-Pro:wwwlogs lidong$ kill -USR1 352
QiongdeMacBook-Pro:wwwlogs lidong$ ls -l
total 88
-rw-r--r--  1 lidong  staff      0  3 30 14:49 access.log
-rw-r--r--  1 lidong  staff  16410  3 30 14:42 access.log.bak
-rw-r--r--  1 lidong  staff    252  3 30 14:28 error.log
QiongdeMacBook-Pro:wwwlogs lidong$ ls -l
total 96
-rw-r--r--  1 lidong  staff    418  3 30 14:49 access.log
-rw-r--r--  1 lidong  staff  16410  3 30 14:42 access.log.bak
-rw-r--r--  1 lidong  staff    252  3 30 14:28 error.log

通過USR1型號量來重讀日誌,繼續刷新頁面,會重新生成access.log日誌文件,這個對於運維做日誌的備份十分有作用。
這裏有個小技巧,通過ps獲取pid可以重新加載配置文件,平滑重啟服務,但是感覺比較麻煩,我們可以使用如下方法操作.
查看配置文件知道nginx的pid存儲在那個文件

kill -HUP `cat /usr/local/etc/nginx/nginx.pid`

USR2平滑升級

假設我們重新編譯了新的版本的nginx,這個時候/usr/local/nginx/bin nginx 的版本就不是之前的版本了如果啟動更新會報錯。

kill -USR2 `cat /usr/local/etc/nginx/nginx.pid`

這個時候使用這個命令來平滑升級nginx服務器

點擊進入本人github倉庫查看更多

nginx信號量