news 2026/3/10 19:25:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 16:56:57

XTOM蓝光三维扫描仪用于自由曲面微尺寸共性电路的增材制造

近年来,集成在曲面的共形电子电路因其在健康监测与诊断、运动传感、可穿戴设备、天线以及光电子器件等领域的广泛应用而备受关注。增材制造技术能够接在曲面上打印,为电路设计提供了更大的灵活性,并能更好地适应复杂的表面拓扑结构。采用创新…

作者头像 李华
网站建设 2026/3/9 11:10:52

Python计算机毕设之基于python+Django多媒体资料管理系统基于python的媒体资源管理系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/5 10:25:26

【课程设计/毕业设计】基于Python的个人身心健康管理系统健康档案心理咨询预约基于Python的个人身心健康管理系统【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华
网站建设 2026/3/3 10:55:32

OptiSystem应用:放大器泵浦功率效应

以信号输出功率、增益和噪声系数为特征的放大器性能取决于泵浦波长。本案例详细介绍了980 nm和1480 nm泵浦的放大器。980nm和1480nm泵浦波长是EDFA中使用的最重要的泵浦波长。图1显示了具有980nm和1480nm波长泵浦的正向泵浦方案中的布局设置。a) 前向泵浦980nmb&…

作者头像 李华
网站建设 2026/3/9 12:46:16

基于Java的台球赛报名系统源码解读

以下是对基于Java的台球赛报名系统源码的深度解读,涵盖系统架构、核心功能、技术实现及优化策略等方面:一、系统架构微服务架构:采用Spring Boot 3.0 Spring Cloud Alibaba构建微服务架构,将系统拆分为用户服务、赛事服务、订单服…

作者头像 李华
网站建设 2026/3/6 16:21:43

Python毕设选题推荐:基于Python的网络流量分析与入侵检测基于Python的网络流量分析系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华