AIX系统(ksh/bash)不同格式时间差对比告警脚本开发求助
AIX系统ksh/bash脚本:对比不同格式时间差并触发告警
核心思路
把两个不同格式的时间字符串转换为Unix时间戳(从1970-01-01 UTC到指定时间的秒数),计算时间差后和阈值对比,超过则触发告警。
脚本实现
以下是适配AIX系统date命令特性的完整可执行脚本:
#!/usr/bin/ksh # 定义变量 StartTime="20 Oct 2022 12:20:48 -0700" CurrentTime=$(date) AlertThreshold=300 # 月份缩写转数字的映射数组 typeset -A month_map month_map=( [Jan]=01 [Feb]=02 [Mar]=03 [Apr]=04 [May]=05 [Jun]=06 [Jul]=07 [Aug]=08 [Sep]=09 [Oct]=10 [Nov]=11 [Dec]=12 ) # 转换StartTime为Unix时间戳 start_ts=$(echo "$StartTime" | awk -v map="${!month_map[*]}" ' BEGIN { split(map, m_arr, " ") for (i in m_arr) month[m_arr[i]] = ENVIRON["month_map["m_arr[i]"]"] } { # 拆分StartTime字段:日 月 年 时分秒 时区 day=$1; mon=$2; year=$3; time=$4 split(time, t_arr, ":") hour=t_arr[1]; min=t_arr[2]; sec=t_arr[3] # 拼接成AIX date可识别的格式:mmddHHMMccyy printf "%s%s%s%s%s\n", month[mon], day, hour, min, year }' | xargs date +%s) # 转换CurrentTime为Unix时间戳 current_ts=$(echo "$CurrentTime" | awk -v map="${!month_map[*]}" ' BEGIN { split(map, m_arr, " ") for (i in m_arr) month[m_arr[i]] = ENVIRON["month_map["m_arr[i]"]"] } { # 拆分CurrentTime字段:星期 月 日 时分秒 时区 年 mon=$2; day=$3; time=$4; year=$6 split(time, t_arr, ":") hour=t_arr[1]; min=t_arr[2]; sec=t_arr[3] # 拼接成AIX date可识别的格式:mmddHHMMccyy printf "%s%s%s%s%s\n", month[mon], day, hour, min, year }' | xargs date +%s) # 计算时间差(取绝对值) time_diff=$(( current_ts - start_ts )) if [ $time_diff -lt 0 ]; then time_diff=$(( -time_diff )) fi # 判断是否触发告警 if [ $time_diff -gt $AlertThreshold ]; then echo "告警:时间差超过${AlertThreshold}秒,当前差值为${time_diff}秒" # 可在此添加实际告警动作,比如发送邮件、调用告警接口等 else echo "时间差正常:${time_diff}秒" fi
关键步骤说明
- 月份映射:AIX的
date命令要求输入数字格式的月份,因此用关联数组将英文缩写转换为两位数字。 - 时间格式转换:
- 处理
StartTime:拆分出日、月、年、时分秒字段,拼接为mmddHHMMccyy格式(如102012202022代表10月20日12点20分2022年),再通过date +%s转换为时间戳。 - 处理
CurrentTime:拆分出月、日、时分秒、年字段,同样拼接为AIX可识别的格式后转换为时间戳。
- 处理
- 时间差计算:取两个时间戳的绝对值差值,避免
StartTime晚于CurrentTime的异常情况。
注意事项
- 时区一致性:示例中
StartTime的-0700和CurrentTime的PDT均为UTC-7,无需额外转换;若时区不同,需先统一转换为UTC时间再计算。 date +%s兼容性:若你的AIX版本不支持+%s字段,可借助perl辅助转换,例如:echo "$date_str" | perl -MTime::Local -ne '...'。
内容的提问来源于stack exchange,提问作者v3rd1ct
相关产品推荐
相关产品推荐

