最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Shell函数如何封装日志轮转逻辑供不同业务模块的后台脚本共享调用
时间:2026-09-04 18:30:49 编辑:袖梨 来源:一聚教程网
可复用的日志轮转函数rotate_logs()封装了清理过期日志、压缩待归档日志和确保目录存在三大职责,通过参数传入路径、保留天数、压缩开关及扩展名,支持多业务脚本统一调用并集成至cron自动执行。
直接封装成可复用的函数,配合参数控制路径、保留天数和压缩行为,就能让多个后台脚本统一调用同一套日志轮转逻辑。
明确函数职责与输入接口
轮转函数只做三件事:清理过期日志、压缩待归档日志、确保目录结构存在。不耦合业务路径或服务名,全部通过参数传入:
-
必需参数:日志目录路径(
$1)、保留天数($2) -
可选参数:是否启用压缩(
$3,值为yes或空)、压缩后扩展名($4,默认.gz) - 返回值:成功返回 0,任意步骤失败立即返回非零码
函数内部做干净的环境适配
避免硬编码,用变量隔离变化点;关键操作前加存在性检查:
- 用
local log_dir="$1"声明局部变量,防止污染全局 - 执行
mkdir -p "$log_dir"确保目录可写,不因路径不存在中断流程 - 用
find "$log_dir" -name "*.log" -mtime +$keep_days -delete清理旧日志,不依赖logrotate配置 - 压缩时判断
gzip是否可用:command -v gzip &>/dev/null || { echo "gzip not found"; return 1; }
支持不同业务脚本按需调用
每个业务脚本只需 source 公共函数库,再传入各自路径即可,无需重复实现:
- 在
/usr/local/lib/shell-libs/logrotate.sh中定义函数rotate_logs() - 业务脚本开头写
source /usr/local/lib/shell-libs/logrotate.sh - 调用示例:
rotate_logs "/var/log/nginx" 7 yes(保留7天,压缩) - 或
rotate_logs "/opt/app/logs" 30(保留30天,不压缩)
集成到定时任务中保持自动运行
把函数调用包装成独立小脚本,交给 cron 执行,解耦调度与逻辑:
- 新建
/opt/scripts/rotate-nginx.sh,内容为:#!/bin/bash
source /usr/local/lib/shell-libs/logrotate.sh
rotate_logs "/var/log/nginx" 7 yes
- 设置权限:
chmod +x /opt/scripts/rotate-nginx.sh - 加入 crontab:
0 2 * * * /opt/scripts/rotate-nginx.sh >> /var/log/rotate-nginx.log 2>&1
相关文章
- DataWorks Data Agent 实战课(八):搭建数据质量巡检服务 09-11
- lgtm:实践指南 09-11
- DoRA:实践指南 09-11
- Codex 进阶实践:用可验收规格定义编码任务 09-11
- RoadArchitect:实践指南 09-11
- WorkflowEngine.NET:实践指南 09-11