背景: Linux nginx日志文件越来越大的问题,有些公司的运维要求将日志按天切割,主要有以下两种方式:
方式一:
1、利用logrotate,一般系统已安装了logrotate,检查系统是否已安装 执行命令:logrotate
2、新建配置文件 vi /etc/logrotate.d/nginx(路径按实际情况填写)脚本如下 :
/home/dffadmin/nginx/logs/*log {
create 0664 dffadmin dffadmin #dffadmin 为用户
#su root root
daily
rotate 10
dateext
missingok
notifempty
compress
sharedscripts
postrotate
[ -e /home/dffadmin/nginx/logs/nginx.pid ] && kill -USR1 cat /home/dffadmin/nginx/logs/nginx.pid
endscript
}
3、测试日志切割 logrotate -d /etc/logrotate.d/nginx
4、强制轮询切割日志 logrotate -vf /etc/logrotate.d/nginx
5、添加定时任务 crontab -e 0 0 * * * sudo logrotate -vf /etc/logrotate.d/nginx
方式二:直接编写脚本 定时任务每天执行
1、编写脚本,脚本如下:
#! /bin/bash
#假设nginx的日志存放路径为/data/logs/
d=date -d “-1 day” +%Y%m%d #定义日期格式
logdir="/data/logs" #日志所在目录
nginx_pid="/usr/local/nginx/logs/nginx.pid" #pid所在目录
cd $logdir
for log in ls *.log
do
mv $log log-log−d
done
find /data/logs/ -type f -mtime +7 -exec rm -f {} ; #删除7天之前产生的日志
/bin/kill -HUP cat $nginx_pid
2、利用nginx定时任务每日执行脚本文件