为了避免运维和日志文件的日渐臃肿,需要对日志进行切割。
1、配置文件的方式
在配置文件的 nginx .conf 文件的 http 模块下:
map $time_iso8601 $logdate {
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
default 'date-not-found';
}
access_log logs/access-$logdate.log ;
重启检测一下,是否能生成。如果不能,可能存在 logs 的权限问题
2、脚本(不建议,过程中会丢失日志)
注意调整为对应的目录使用。
#!/bin/bash
date=$(date +%F -d -1day)
cd /data1/nginx/logs
if [ ! -d bak ] ; then
mkdir -p bak
fi
mv access.log bak/access_$date.log
mv error.log bak/error_$date.log
# /usr/bin/nginx -s reload
kill -s SIGUSR1 $(cat /data1/nginx/logs/nginx.pid)
tar -jcvf bak/$date.tar.gz bak/access_$date.log bak/error_$date.log
find /data1/nginx/logs/bak -mtime +30 -name "*.gz" -exec rm -rf {} ;
find /data1/nginx/logs/bak -mtime +1 -name "*.log" -exec rm -rf {} ;
添加服务器的定时脚本(每天一点开始切割)
0 1 * * * /bin/sh /data1/nginx/logs/nginx_log.sh
输入命令 crontab -e ,添加此脚本就可以
crontab -u //设定特定用户的定时服务
crontab -l //列出当前用户定时服务内容
crontab -r //删除当前用户的定时服务
crontab -e //编辑当前用户的定时服务
前面五位 * 是定时执行的时间周期 说明如下:
第一个 * 表示分钟:取值范围 0-59
第二个 * 表示小时:取值范围0-23
第三个 * 表示天数:取值范围1-31
第四个 * 表示月份:取值范围1-12
第五个 * 表示每周:取值范围0-6
3、可以调整,用日志配置文件的方式进行切割,设置设置定时脚本,只保留最近 30 天的日志