gbase8s之message log rotate
以下是一个实现gbase8s日志轮转的Shell脚本,支持参数化配置执行频率、日志路径和保留数量:
#!/bin/bash
# 描述:Informix消息日志轮转脚本
# 作者:Generated by AI
# 日期:$(date +%Y-%m-%d)
# 版本:1.0# 默认配置参数
DEFAULT_LOG_PATH=`onstat -g cfg|grep MSGPATH|awk '{print $2}'`
DEFAULT_RETAIN=52
DEFAULT_SCHEDULE="daily" # 可选:daily, weekly, monthly# 使用帮助
usage() {echo "用法: $0 [选项]"echo "选项:"echo " -p, --logpath PATH 日志文件路径 (默认: $DEFAULT_LOG_PATH)"echo " -r, --retain NUM 保留的日志数量 (默认: $DEFAULT_RETAIN)"echo " -s, --schedule FREQ 执行频率 [daily|weekly|monthly] (默认: $DEFAULT_SCHEDULE)"echo " -h, --help 显示帮助信息"exit 1
}# 解析命令行参数
while [[ $# -gt 0 ]]; docase "$1" in-p|--logpath)LOG_PATH="$2"shift 2;;-r|--retain)RETAIN="$2"shift 2;;-s|--schedule)SCHEDULE="$2"shift 2;;-h|--help)usage;;*)echo "错误: 未知选项 $1"usage;;esac
done# 设置默认值
: ${LOG_PATH:=$DEFAULT_LOG_PATH}
: ${RETAIN:=$DEFAULT_RETAIN}
: ${SCHEDULE:=$DEFAULT_SCHEDULE}# 验证保留数量
if ! [[ "$RETAIN" =~ ^[0-9]+$ ]]; thenecho "错误: 保留数量必须是整数"exit 1
fi# 执行日志轮转函数
rotate_log() {echo "$(date +'%Y-%m-%d %H:%M:%S') - 开始日志轮转: $LOG_PATH (保留: $RETAIN)"dbaccess sysadmin <<EOF 2>&1EXECUTE FUNCTION task("message log rotate", "$LOG_PATH", $RETAIN);
EOFif [ $? -eq 0 ]; thenecho "$(date +'%Y-%m-%d %H:%M:%S') - 日志轮转成功完成"elseecho "$(date +'%Y-%m-%d %H:%M:%S') - 错误: 日志轮转失败" >&2exit 1fi
}# 根据计划执行
case "$SCHEDULE" indaily)rotate_log;;weekly)# 仅在周六执行 (0-6, 0=周日, 6=周六)if [ $(date +%u) -eq 6 ]; thenrotate_logelseecho "$(date +'%Y-%m-%d %H:%M:%S') - 跳过执行 (周计划设置为周六执行)"fi;;monthly)# 仅在每月1号执行if [ $(date +%d) -eq 1 ]; thenrotate_logelseecho "$(date +'%Y-%m-%d %H:%M:%S') - 跳过执行 (月计划设置为每月1号执行)"fi;;*)echo "错误: 不支持的计划频率 '$SCHEDULE'"usage;;
esac
使用说明
-
基本用法
./rotate_log.sh
-
使用默认参数执行日志轮转
2.自定义参数:
./rotate_log.sh --logpath /data/informix/ol.log --retain 30 --schedule weekly
-
配置选项:
-
-p/--logpath
:指定Informix日志路径 -
-r/--retain
:设置保留的日志数量 -
-s/--schedule
:设置执行频率(daily/weekly/monthly)
-
设置定时任务(cron)
-
每日执行(默认):
# 每天凌晨2点执行
0 2 * * * /path/to/rotate_log.sh
每周执行:
# 每周六凌晨3点执行
0 3 * * 6 /path/to/rotate_log.sh -s weekly
每月执行:
# 每月1号凌晨4点执行
0 4 1 * * /path/to/rotate_log.sh -s monthly
注意事项
-
执行权限:
chmod +x rotate_log.sh
online.log
-
原始日志文件会被重命名为
.1
、.2
等后缀