可复用的日志轮转函数rotate_logs()封装了清理过期日志、压缩待归档日志和确保目录存在三大职责,通过参数传入路径、保留天数、压缩开关及扩展名,支持多业务脚本统一调用并集成至cron自动执行。
直接封装成可复用的函数,配合参数控制路径、保留天数和压缩行为,就能让多个后台脚本统一调用同一套日志轮转逻辑。
轮转函数只做三件事:清理过期日志、压缩待归档日志、确保目录结构存在。不耦合业务路径或服务名,全部通过参数传入:
$1)、保留天数($2)$3,值为 yes 或空)、压缩后扩展名($4,默认 .gz)避免硬编码,用变量隔离变化点;关键操作前加存在性检查:
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
0 2 * * * /opt/scripts/rotate-nginx.sh >> /var/log/rotate-nginx.log 2>&1