一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Shell函数如何封装日志轮转逻辑供不同业务模块的后台脚本共享调用

时间:2026-09-04 18:30:49 编辑:袖梨 来源:一聚教程网

可复用的日志轮转函数rotate_logs()封装了清理过期日志、压缩待归档日志和确保目录存在三大职责,通过参数传入路径、保留天数、压缩开关及扩展名,支持多业务脚本统一调用并集成至cron自动执行。

直接封装成可复用的函数,配合参数控制路径、保留天数和压缩行为,就能让多个后台脚本统一调用同一套日志轮转逻辑。

明确函数职责与输入接口

轮转函数只做三件事:清理过期日志、压缩待归档日志、确保目录结构存在。不耦合业务路径或服务名,全部通过参数传入:

  1. 必需参数:日志目录路径($1)、保留天数($2
  2. 可选参数:是否启用压缩($3,值为 yes 或空)、压缩后扩展名($4,默认 .gz
  3. 返回值:成功返回 0,任意步骤失败立即返回非零码

函数内部做干净的环境适配

避免硬编码,用变量隔离变化点;关键操作前加存在性检查:

  1. local log_dir="$1" 声明局部变量,防止污染全局
  2. 执行 mkdir -p "$log_dir" 确保目录可写,不因路径不存在中断流程
  3. find "$log_dir" -name "*.log" -mtime +$keep_days -delete 清理旧日志,不依赖 logrotate 配置
  4. 压缩时判断 gzip 是否可用:command -v gzip &>/dev/null || { echo "gzip not found"; return 1; }

支持不同业务脚本按需调用

每个业务脚本只需 source 公共函数库,再传入各自路径即可,无需重复实现:

  1. /usr/local/lib/shell-libs/logrotate.sh 中定义函数 rotate_logs()
  2. 业务脚本开头写 source /usr/local/lib/shell-libs/logrotate.sh
  3. 调用示例:rotate_logs "/var/log/nginx" 7 yes(保留7天,压缩)
  4. rotate_logs "/opt/app/logs" 30(保留30天,不压缩)

集成到定时任务中保持自动运行

把函数调用包装成独立小脚本,交给 cron 执行,解耦调度与逻辑:

  1. 新建 /opt/scripts/rotate-nginx.sh,内容为:

    #!/bin/bash

    source /usr/local/lib/shell-libs/logrotate.sh

    rotate_logs "/var/log/nginx" 7 yes

  2. 设置权限:chmod +x /opt/scripts/rotate-nginx.sh
  3. 加入 crontab:0 2 * * * /opt/scripts/rotate-nginx.sh >> /var/log/rotate-nginx.log 2>&1

热门栏目