您的位置:首页 > 运维架构 > Nginx

[Linux运维 -- webserver]nginx的日志轮转

2015-08-24 19:57 555 查看

nginx的日志轮转

今天突然发现nginx所在的机器出现了问题,报警磁盘空间快满了。 立马看看。

$df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              50G  50G   50G   100% /
/dev/sda1             247M   23M  212M  10% /boot
tmpfs                  48G  368K   48G   1% /dev/shm
/dev/sda5             1.1T  491M  1.1T   1% /home

发现根目录满了,查询一下是哪个文件比较大,耗空间

$sudo find / -size +512M | xargs ls -lh
-rw-r--r-- 1 root root 3.5G Aug  8 15:16 /usr/local/openresty/nginx/logs/access.log
-rw-r--r-- 1 root root 3.0G Aug  8 15:16 /usr/local/openresty/nginx/logs/error.log

发现nginx的请求和错误日志文件已经非常大了。

[xxxxx:/usr/local/openresty/nginx/logs]
$ls
access.log  error.log  nginx.pid

到日志目录下,发现只有一个文件,原来nginx的日志文件没有做轮转导致的。

使用linux自带的logrotate日志轮询工具来对nginx的log做处理。

具体的格式如下:

$ cat /etc/logrotate.d/nginx
/usr/local/openresty/nginx/logs/*.log {
daily
missingok
rotate 20
notifempty
sharedscripts
postrotate
sudo kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid` > /dev/null
endscript
}

上面各行的意思为:

/usr/local/openresty/nginx/logs/*.log 为nginx的日志路径

daily 每天轮转一次

missingok 即使日志不存在也继续执行

rotate 20 保留20个备份

notifempty 如果空文件的话不转存

sharedscripts 在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

postrotate 轮转结束的动作

endscript 用于结束postrotate部分的脚本

脚本部分

sudo kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid` > /dev/null

让nginx进程平滑加载

参考:

(1) http://os.51cto.com/art/200912/167478_all.htm

(2) http://huoding.com/2013/04/21/246

(3) http://blog.csdn.net/superhosts/article/details/8741227
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: