Nginx的日志切割

2024-04-19 17:24:26 2355

Nginx的日志切割

蓝队云小课堂:

问题描述

nginx默认没有提供对日志文件的分割功能,所以随着时间的增长,access.log和error.log文件会越来越大,本文主要介绍了分割nginx日志的实现

解决办法

      写一个脚本,去切分日志

      使用crontab写一个定时任务,每天切一个。

1. 新建切割日志的脚本/opt/sh/cutlogs.sh

#!/bin/bash
 
#
指定日志和切割后日志备份的目录
YEAR=$(date +%Y)
MONTH=$(date +%m)
DAY=$(date +%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
LOGS_PATH=/data/docker/saber/logs
LOGS_BAK_PATH=/data/docker/saber/logs-bak
 
#
得到1级目录名
if [[ $(($DAY)) -eq 1 ]]
  then
    if [[ $(($MONTH)) -eq 1 ]]
      then
        LOGS_BAK_PATH=$LOGS_BAK_PATH/$((${YEAR}-1))-12
    else
      if [[ $(($MONTH)) -gt 10 ]]
        then
          LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-$((${MONTH}-1))
      else
          LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-0$((${MONTH}-1))
      fi
    fi
else
    LOGS_BAK_PATH=$LOGS_BAK_PATH/${YEAR}-${MONTH}
fi
 
#
创建目录
mkdir -p $LOGS_BAK_PATH/${YESTERDAY}
 
#
复制当前的日志文件到备份的目录
cp ${LOGS_PATH}/access.log ${LOGS_BAK_PATH}/${YESTERDAY}/access_${YESTERDAY}.log
#cp ${LOGS_PATH}/admin_access.log ${LOGS_BAK_PATH}/${YESTERDAY}/admin_access_${YESTERDAY}.log
cp ${LOGS_PATH}/error.log ${LOGS_BAK_PATH}/${YESTERDAY}/error_${YESTERDAY}.log
 
#
清空日志
> ${LOGS_PATH}/access.log
#> ${LOGS_PATH}/admin_access.log
> ${LOGS_PATH}/error.log

2. 建立计划任务

crontab -e
#
写入以下内容
0 1 * * * sh /opt/sh/cutlogs.sh >> /opt/sh/cutlogs.log

 

更多小知识,可联系蓝队云一起探讨。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: