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 协议》,转载必须注明作者和本文链接