find 命令删除冗余 Nginx 错误日志并实现备份

find 命令是 Linux 系统一种常见的命令,有着强大的功能,缺点是遍历文件查找,效率相对低。

当你的 LNMP 平台正式开始运作,每天会产生大量的日志,包括 PHP 、 Nginx 、 Mysql 、 Redis 等等各种各样的登录、警告、提示、错误信息。如果日志所在目录过于臃肿,可能会导致服务器运行缓慢甚至暂停运行。所以,清理这些日志成为后端工程师日常工作中的一部分。
清理方式多种,现介绍用 find 命令进行清理的方法。
命令格式如下

find 目标目录 查找条件 查找文件 -exec 执行命令 {} \;
其中 {} 表示查找结果, \; 为固定格式。

如果你想查找 /var/log/ 目录下大于 200k 以 .log 结尾的文件,并且想把查询结果复制一份在 /opt/bak/ 目录下作为备份,命令如下

find /var/log/ -size +200k -name '*.log' -exec cp {} /opt/bk/ \;

编写 Shell 脚本 clear_logs.sh 减少每次手写代码量,并且易于更改。

#!/bin/bash
#
#

log_path='/usr/local/nginx/logs/'
new_log_path='/home/error_logs_bk/'

cd $new_log_path

# 以年月日时分秒作为文件名称前缀
date=`date +"%Y:%m:%d:%H:%M:%S"`

# 生成备份目录
mkdir $date.error.log

# 先备份
find $log_path -name '*error.log' -exec cp {} /home/error_logs_bk/$date.error.log \;

# 备份成功输出成功信息,否则就报错退出
if [ $? -eq 0 ];then
    echo 'Errorlogs backup successfully!'
else
    echo 'Failure in backup fo errorlogs!'
    exit
fi

# 删除成功输出成功信,否则就报错退出
find $log_path -name '*error.log' -exec rm -rf {} \;

if [ $? -eq 0 ];then
    echo 'Errorlogs deleted successfully!'
else
    echo 'Failure in deletion fo errorlogs!'
    exit
fi

执行脚本

sh clear_logs.sh

输出

Errorlogs backup successfully!
Errorlogs deleted successfully!

进入 /home/error_logs_bk/ 目录查看,成功实现备份。

2020:08:30:00:16:16.error.log

如果想开机就执行脚本,在 #/bin/bash 下添加以下代码

#chkconfig:2345 80 30
#description:auto_run

添加至开机自动启动项目中

chkconfig --add clear_logs.sh

如果计划每周六凌晨零点执行,可以使用 crontab 命令定时删除冗余日志,执行 crontab -e

00 00 * * 6 /bin/bash /opt/shells/clear_logs.sh
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!