因为之前装了 fail2ban,对日志进行了一个统一管理,但是 nginx 本身不具备日志切割的功能,于是就导致了日志日积月累的庞大,面对一天十几万的 ssh 等各种乱七八糟的攻击请求,产生的日志不计其数,有必要进行每日切割。
解决办法:脚本 + 定时任务
原理:将日志以日期进行备份,再清除日志文件内容,达到类似切割的效果。
对于仅有一份日志的情况下脚本这样写:
#!/bin/bash log_path=/usr/local/nginx/logs/access.log save_path=/usr/local/nginx/logs/bak/access_$(date +{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}Y{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}m{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}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 +{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}Y{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}m{3134179b33eee035b545902bde6c1a95dd50f4b6dd1c7a254d8d16b9c4e64f13}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
参考:
本站由以下主机服务商提供服务支持:
0条评论