3

Nginx 日志定时切割脚本

 2 years ago
source link: http://i.lckiss.com/?p=7820
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Nginx 日志定时切割脚本

2022-03-06

因为之前装了 fail2ban,对日志进行了一个统一管理,但是 nginx 本身不具备日志切割的功能,于是就导致了日志日积月累的庞大,面对一天十几万的 ssh 等各种乱七八糟的攻击请求,产生的日志不计其数,有必要进行每日切割。

解决办法:脚本 + 定时任务

原理:将日志以日期进行备份,再清除日志文件内容,达到类似切割的效果。

对于仅有一份日志的情况下脚本这样写:

#!/bin/bash
log_path=/usr/local/nginx/logs/access.log
save_path=/usr/local/nginx/logs/bak/access_$(date +%Y%m%d -d 'yesterday').log
cp $log_path $save_path && echo > $log_path

但我的情况以及很多人的情况肯定不会是只有一份日志,那么就需要用循环来解决了。

logcut.sh 内容如下(遍历文件 取文件名 按文件名创建文件夹 再清空日志):

#!/bin/bash
base_path=/path/to/nginx_log
backup_path=/path/to/log_backup
for log_path in $base_path/*; do
    log_name=$(basename $log_path .log)
    dstDir=$backup_path/$log_name
    if [ ! -d dstDir ]; then
        mkdir -p $dstDir
    fi
    save_path=$dstDir/log_$(date +%Y%m%d -d 'yesterday').log
    cp $log_path $save_path && echo >$log_path
done

创建定时任务:

$crontab -e

输入内容:

0 0  * * * /path/to/logcut.sh #每天的00:00执行日志切分

查看定时任务是否添加成功:

crontab -l

Nginx access.log文件太大,自动释放清理


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK