nginx日志自动切割方法
Nginx 日志分文件有以下两个:
access.log 记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;
error.log 记录服务器错误的日志;
一、利用脚本日志切割(按天进行日志切割)
以下脚本任选一个就行;
A脚本
#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/nginx/logs_backup/$year$month" #日志存储路径
logs_path="/usr/local/nginx/logs/" #要切割的日志路径
logs_access="access" #要切割的日志
logs_error="error"
pid_path="/usr/local/nginx/logs/nginx.pid" #nginx的pid
[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y%m%d`
#mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
B脚本
#! /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` 做个for循环
do
mv $log $log-$d 做一个改名操作
done
/bin/kill -HUP `cat $nginx_pid` 重新加载一下,生成新的日志文件
设置定时任务
# crontab –e
59 23 * * * bash /usr/local/nginx/cut_ngnix_log.sh #每天23:59分开始执行;
二、利用logrotate管理日志
(1)默认centos系统安装自带logrotate,软件包信息说明;
# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d # 配置目录
(2)使用Logrorate切割日志
# vim /etc/logrotate.d/nginx
/var/log/nginx/*.log #此处为nginx存储日志的地方;
{
daily #指定转储周期为每天
rotate 30 #转储次数,超过将会删除最老的那一个
missingok #如果日志文件丢失,不要显示错误
compress #通过gzip 压缩转储以后的日志
delaycompress #当前转储的日志文件到下一次转储时才压缩
notifempty #当日志文件为空时,不进行轮转
postrotate #执行的指令
if [ -f /var/run/nginx/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx/nginx.pid`
fi
endscript #PID路径根据实际路径填写;
}
(3)保存好配置文件后,测试效果:
# logrotate -vf /etc/logrotate.d/nginx
access.log access.log.1 error.log error.log.1
(4)定时任务执行
#crontab –e
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx #每天凌晨00:00自动执行日志切割任务;
版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2020-06/i1047.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论