当前位置: 首页 > news >正文

用Linux脚本轮转业务系统的日志

背景

上一篇文章用Linux自带的logrotate来轮转日志,确实方便,但它会改变当前日志文件的指针,因为它的机制是重新创建当前日志文件。在有些情况下,会出现奇怪的问题。比如一直打开当前日志文件不关闭的业务系统会受影响。

解决

自己写Linux脚本来轮转日志,最大的区别是:不会重新创建当前日志,而是收缩或清空当前日志。

轮转

#!/bin/bash# 日志轮转脚本 - rotate_log.sh# 使用方法:可以放在crontab中,每天00:01执行# crontab设置示例:1 0 * * * /path/to/rotate_log.sh# 设置日志目录 - 请根据实际情况修改LOG_DIR="/myapp/log"CURRENT_LOG="$LOG_DIR/current.log"# 检查日志目录是否存在if[!-d"$LOG_DIR"];thenecho"错误:日志目录不存在 -$LOG_DIR"exit1fi# 检查当前日志文件是否存在if[!-f"$CURRENT_LOG"];thenecho"警告:当前日志文件不存在 -$CURRENT_LOG"exit0# 这不是致命错误,只是没有日志需要轮转fi# 获取前一天的日期(格式:YYYY-MM-DD)# 注意:macOS和Linux的date命令参数可能不同,这里使用通用格式YESTERDAY=$(date-d"yesterday"+"%Y-%m-%d"2>/dev/null||date-v-1d +"%Y-%m-%d"2>/dev/null)if[-z"$YESTERDAY"];thenecho"错误:无法获取昨天的日期"exit1fi# 备份文件名BACKUP_LOG="$LOG_DIR/$YESTERDAY.log"# 检查备份文件是否已存在if[-f"$BACKUP_LOG"];thenecho"警告:备份文件已存在,跳过轮转 -$BACKUP_LOG"exit0fi# 复制当前日志到备份文件ifcp"$CURRENT_LOG""$BACKUP_LOG";thenecho"已复制日志到:$BACKUP_LOG"# 清空当前日志文件iftruncate -s0"$CURRENT_LOG";thenecho"已清空当前日志文件:$CURRENT_LOG"else# 如果truncate命令不可用,使用其他方法>"$CURRENT_LOG"&&echo"已清空当前日志文件:$CURRENT_LOG"fi# 可选:压缩备份文件以节省空间# gzip "$BACKUP_LOG" && echo "已压缩备份文件: $BACKUP_LOG.gz"echo"日志轮转完成于:$(date)"exit0elseecho"错误:无法复制日志文件"exit1fi

清理旧日志

#!/bin/bash# 日志清理脚本 - clean_old_logs.sh# 删除超过7天的日志文件# crontab设置示例:0 2 * * * /path/to/clean_old_logs.sh# 设置日志目录 - 请根据实际情况修改LOG_DIR="/myapp/log"# 设置保留天数DAYS_TO_KEEP=7# 检查日志目录是否存在if[!-d"$LOG_DIR"];thenecho"错误:日志目录不存在 -$LOG_DIR"exit1fi# 切换到日志目录cd"$LOG_DIR"||{echo"错误:无法进入日志目录 -$LOG_DIR"exit1}# 查找并删除超过7天的.log文件# 注意:这里使用find命令的-mtime参数,它会根据文件的修改时间来判断# +7 表示7天以前的文件# -name "*.log" 表示匹配.log文件echo"开始清理超过$DAYS_TO_KEEP天的日志文件..."# 先列出将要删除的文件(用于检查)# echo "将要删除的日志文件:"# find . -maxdepth 1 -name "*.log" -type f -mtime +$DAYS_TO_KEEP -print# # 询问是否确认删除(如果是手动执行)# # 如果是crontab自动执行,可以移除交互部分# if [ -t 0 ]; then# # 在终端中运行,询问确认# read -p "是否确认删除这些文件?(y/N): " -n 1 -r# echo# if [[ ! $REPLY =~ ^[Yy]$ ]]; then# echo "取消操作"# exit 0# fi# fi# 实际执行删除操作DELETED_COUNT=$(find.-maxdepth1-name"*.log"-type f -mtime +$DAYS_TO_KEEP -delete -print|wc-l)echo"已删除$DELETED_COUNT个过期日志文件"echo"清理完成于:$(date)"# 可选:同时清理压缩的日志文件(如果使用了压缩)# find . -maxdepth 1 -name "*.log.gz" -type f -mtime +$DAYS_TO_KEEP -delete# echo "已清理压缩的日志文件"

定时执行

sudocrontab-e00* * * /myapp/logrotate/rotate_log.sh04* * * /myapp/logrotate/clean_old_logs.sh
http://www.jsqmd.com/news/350828/

相关文章:

  • 2026年如何选择靠谱的重庆预应力配件销售厂家? - 睿易优选
  • 2026年洗发水厂家及贴牌代加工企业权威推荐——聚焦广州优质厂家 - 深度智识库
  • 比话降AI使用技巧大全:让降AI效果最大化 - 我要发一区
  • 系统核心解析:深入操作系统内部机制——基础I/O探秘:文件描述符、重定向与Shell的I/O魔法(二) - 详解
  • 2026年水下力传感器优质供应商综合测评:知名制造商/品牌口碑/性价比全面解析 - 品牌推荐大师1
  • 2026年修补防水涂料生产厂家有哪些专业选择,助您实现更好的施工效果 - 睿易优选
  • 2026年水下力传感器厂家权威推荐榜:水下三分量/六分量力传感器/高精度/抗干扰TOP品牌盘点 - 品牌推荐大师1
  • 2026广州洗发水OEM/ODM企业排名:这5家凭什么上榜? - 深度智识库
  • 为什么我坚持推荐全文降AI?三个月使用体验分享 - 我要发一区
  • 研究生师兄的降AI经验:嘎嘎降AI帮我省了一周时间 - 我要发一区
  • 收藏!程序员转行大模型全攻略|小白也能看懂,避开坑快速入局
  • 【开题答辩全过程】以 高校体育场馆管理系统为例,包含答辩的问题和答案
  • 2026年重庆好用的锚具厂家加工推荐榜单,帮你提升选择质量 - 睿易优选
  • 强迫症福音!彻底根治 Win11 桌面删不掉的“Learn this picture”图标
  • 全文降AI后还需要做什么?完整的后续处理流程 - 我要发一区
  • 基于springboot的钱币收藏交流系统的设计与实现(源码+论文+部署+安装)
  • 2026年重庆职高学校选择指南 优质院校解析及实用选型参考 差异化解析与适配建议 - 深度智识库
  • P1560 学习笔记
  • 2026年精选重庆1*7钢绞线供应商推荐,让你找到靠谱厂家 - 睿易优选
  • Unity场景中2D物体物体屏幕适配
  • 【Unity】【Photon】Fusion2中的延迟补偿机制(Lag Compensation)学习笔记
  • 32.Android系统源码-gRPC实战 - Google高性能RPC框架核心技术
  • 2026年二分量杆式传感器知名品牌排行榜:质量可靠/精度高/用户反馈优质的TOP厂家 - 品牌推荐大师1
  • 全文降AI的5个常见误区,别再踩坑了 - 我要发一区
  • 第5天:场景假设——连接客户与产品的桥梁
  • 33.Android系统源码-LLVM实战 - 现代编译器基础设施核心技术
  • 水性色浆厂家权威榜单:技术实力与市场口碑深度解析 - 深度智识库
  • 毕业季必看:如何用比话降AI一次性搞定论文检测 - 我要发一区
  • Agent Skills 笔记
  • 2026年资产管理系统厂商推荐:资产管理系统主要有哪些平台?五家领先企业深度解析 - 品牌2026