Nginx了解如何进行日志切割吗?

258 阅读1分钟

 为了避免运维和日志文件的日渐臃肿,需要对日志进行切割。

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 ;

image.png

重启检测一下,是否能生成。如果不能,可能存在 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 天的日志