浅语
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大。所以需要进行日志文件的切割
首先,就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。因为linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主进程发送USR1信号。
nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。
重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。
工作进程会立刻打开新的日志文件并关闭重名名的日志文件。
详细操作
关于nginx日志文件的脚本切割
提供以下方法
1.独立创建一个脚本文件进行执行
2.使用centos内的/etc/logrotate.d/nginx脚本进行切割
方法1:
vim /opt/nginxlogrotate.sh
LOGPATH=/var/log/nginx/access.log #定义日志文件位置
BASEPATH=/usr/local/nginx #备份的日志位置
BAK="$BASEPATH"/$(date +"%Y%m%d")-access.log #备份后的日志文件名
mv "$LOGPATH" $BAK #移动文件
/bin/kill -USR1 `cat /run/nginx.pid` #执行切割
方法2:
vim /etc/logrotate.d/nginx
/var/log/nginx/*log {
create 0644 nginx nginx
daily
rotate 7
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
#create ... : 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始文件
#postrotate和endscript: 里面指定的命令将被执行
#rotate: 保留最近多少天的记录
#sharedscripts: 只为整个日志组运行一次的脚本
#daily: 按天切割 可用值 monthly weekly yearly
#notifempty: 如果日志文件为空,不执行切割
#missingok: 忽略错误。
#dateext: 切割后的日志文件会附加上一个短划线和YYYYMMDD格式的日期,没有此配置项会附加一个小数点加一个数字序号
#compress: 在轮询任务完成后,已经轮询的归档将使用gzip进行压缩
创建定时任务:
方法1:
crontab -e
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx >> /opt/cutnginx.log 2>&1
# -f 强制执行
方法2:
crontab -e
0 0 * * * /bin/bash /opt/nginxlogrotate.sh >> /opt/cutnginx.log 2>&1
#2>&1” 表示将正确输出和错误输出都保存到同一个文件中 >>表示的是追加