真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何滾動(dòng)docker中的nginx日志

本篇內(nèi)容介紹了“如何滾動(dòng)docker中的nginx日志”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了疊彩免費(fèi)建站歡迎大家使用!

Nginx 自己沒(méi)有處理日志的滾動(dòng)問(wèn)題,它把這個(gè)球踢給了使用者。一般情況下,你可以使用 logrotate 工具來(lái)完成這個(gè)任務(wù),或者如果你愿意,你可以寫(xiě)各式各樣的腳本完成同樣的任務(wù)。

Nginx 官方其實(shí)給出了如何滾動(dòng)日志的說(shuō)明:
Rotating Log-files
In order to rotate log files, they need to be renamed first. After that USR1 signal should be sent to the master process. The master process will then re-open all currently open log files and assign them an unprivileged user under which the worker processes are running, as an owner. After successful re-opening, the master process closes all open files and sends the message to worker process to ask them to re-open files. Worker processes also open new files and close old files right away. As a result, old files are almost immediately available for post processing, such as compression.
這段說(shuō)明的大意是:

  • 先把舊的日志文件重命名

  • 然后給 nginx master 進(jìn)程發(fā)送 USR1 信號(hào)

  • nginx master 進(jìn)程收到信號(hào)后會(huì)做一些處理,然后要求工作者進(jìn)程重新打開(kāi)日志文件

  • 工作者進(jìn)程打開(kāi)新的日志文件并關(guān)閉舊的日志文件

其實(shí)真正需要我們做的工作只有前面兩點(diǎn)!

假設(shè)你的系統(tǒng)中已經(jīng)安裝好了 docker,這里我們直接運(yùn)行一個(gè) nginx 容器:

$ docker run -d \
    -p 80:80 \
    -v $(pwd)/logs/nginx:/var/log/nginx \
    --restart=always \
    --name=mynginx \
    nginx:1.11.3

注意,我們把 nginx 的日志綁定掛載到了當(dāng)前目錄下的 logs 目錄下。
把下面的內(nèi)容保存到 test.sh 文件中:

#!/bin/bash

for ((i=1;i<=100000;i++))
do
    curl http://localhost > /dev/null
    sleep 1
done

然后運(yùn)行這個(gè)腳本,就可以模擬產(chǎn)生連續(xù)的日志記錄。

創(chuàng)建 rotatelog.sh 文件,其內(nèi)容如下:

#!/bin/bash

getdatestring()
{
    TZ='Asia/Chongqing' date "+%Y%m%d%H%M"
}
datestring=$(getdatestring)

mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log
mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log
kill -USR1 `cat /var/run/nginx.pid`

getdatestring 函數(shù)取當(dāng)前的時(shí)間并格式化為字符串,比如 "201807241310",筆者比較喜歡用日期和時(shí)間來(lái)命名文件。注意這里通過(guò) TZ='Asia/Chongqing' 指定了時(shí)區(qū),因?yàn)槟J(rèn)情況下格式化的是 UTC 時(shí)間,用起來(lái)怪怪的(要實(shí)時(shí)腦補(bǔ) +8 小時(shí))。下面的兩條 mv 命令用來(lái)重命名日志文件。最后通過(guò) kill 命令向 nginx master 進(jìn)程發(fā)送 USR1 信號(hào)。

通過(guò)下面的命令為 rotatelog.sh 文件添加可執(zhí)行權(quán)限并復(fù)制到 $(pwd)/logs/nginx 目錄下:

$ chmod +x rotatelog.sh
$ sudo cp rotatelog.sh $(pwd)/logs/nginx

我們的 nginx 運(yùn)行在容器中,所以需要在容器中給 nginx master 進(jìn)程發(fā)送 USR1 信號(hào)。因此我們需要通過(guò) docker exec 命令在 mynginx 容器中執(zhí)行 rotatelog.sh 腳本:

$ docker exec mynginx bash /var/log/nginx/rotatelog.sh

執(zhí)行一次上面的命令,會(huì)如期產(chǎn)生一批新的日志文件:

如何滾動(dòng)docker中的nginx日志

下面我們把這個(gè)命令配置在定時(shí)任務(wù)中,讓它每天早上 1 點(diǎn)鐘執(zhí)行一次。執(zhí)行 crontab -e 命令,并在文件的末尾添加下面的行:

* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh

如何滾動(dòng)docker中的nginx日志

保存并退出就可以了。下圖是筆者測(cè)試過(guò)程中每 5 分鐘滾動(dòng)一次的效果:

如何滾動(dòng)docker中的nginx日志

理論上這么做是可以的,因?yàn)橥ㄟ^(guò)綁定掛載的數(shù)據(jù)卷中的內(nèi)容從宿主機(jī)上看和從容器中看都是一樣的。但是真正這么做的時(shí)候你很可能碰到權(quán)限問(wèn)題。在宿主機(jī)中,你一般使用的是普通用戶,而在容器中產(chǎn)生的日志文件的所有者是會(huì)是特殊的用戶,并且一般不會(huì)給其它用戶寫(xiě)和執(zhí)行的權(quán)限:

如何滾動(dòng)docker中的nginx日志

當(dāng)然,如果你在宿主機(jī)中使用的是 root 用戶就不會(huì)有問(wèn)題。

其實(shí)這個(gè)問(wèn)題的全稱應(yīng)該是:能從宿主機(jī)中給 docker 容器中的 nginx master 進(jìn)程發(fā)送信號(hào)嗎?
答案是,可以的。
我們可以通過(guò)命令:

$ docker container kill mynginx -s USR1

向容器中的 1 號(hào)進(jìn)程(nginx master)發(fā)送 USR1 信號(hào)(這種方式只能向 1 號(hào)進(jìn)程發(fā)送信號(hào)):

如何滾動(dòng)docker中的nginx日志

結(jié)合上面的兩個(gè)問(wèn)題,我們可以寫(xiě)出另外的一種方式來(lái)滾動(dòng) docker 中的 nginx 日志。這種方式不需要通過(guò) docker exec 命令在容器中執(zhí)行命令,而完全在宿主機(jī)中完成所有的操作:

  • 先重命名容器數(shù)據(jù)卷中的日志文件

  • 給容器中的 1 號(hào)進(jìn)程發(fā)送 USR1 信號(hào)

“如何滾動(dòng)docker中的nginx日志”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)站題目:如何滾動(dòng)docker中的nginx日志
鏈接URL:http://weahome.cn/article/geejps.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部