⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.ksh

📁 ksh 实现的基于hpux下的性能数据以及故障的采集程序。可以作为新手练手使用
💻 KSH
📖 第 1 页 / 共 2 页
字号:
  fi}# 将进程的 ELAPSED Time 转化为分钟# 用法: elapsed_time  [[ dd-]hh:]mm:ssfunction elapsed_time{  if [[ ${#1} = 0 ]] then     return 1  fi  etime=$1  echo etime is $etime  if [[ `expr "$etime" : '^.*-' 2>/dev/null` > 0 ]] then    dd=`expr "$etime" : '^\(.*\)-.*$' 2>/dev/null`    hh=`expr "$etime" : '^.*-\(..\).*$' 2>/dev/null`    mm=`expr "$etime" : '^.*\(..\):.*$' 2>/dev/null`    ss=`expr "$etime" : '^.*\(..\)$' 2>/dev/null`      echo dd is $dd    echo hh is $hh    echo mm is $mm    echo ss is $ss  elif [[ `expr "$etime" : '^.*:.*:.*$' 2>/dev/null` > 0 ]] then    dd=0    hh=`expr "$etime" : '^\(..\).*$' 2>/dev/null`    mm=`expr "$etime" : '^.*:\(..\):..$' 2>/dev/null`    ss=`expr "$etime" : '^.*\(..\)$' 2>/dev/null`      echo dd is $dd    echo hh is $hh    echo mm is $mm    echo ss is $ss  else    dd=00    hh=00    mm=`expr "$etime" : '^\(..\):.*$' 2>/dev/null`    ss=`expr "$etime" : '^.*\(..\)$' 2>/dev/null`      echo dd is $dd    echo hh is $hh    echo mm is $mm    echo ss is $ss    fi  min=`echo "$dd * 60 * 24 + $hh * 60 + $mm" | bc`  echo $min}# 日志登记函数# 日志级别 DEBUG -- 调试信息 INFO -- 一般运行信息  WARN -- 警告类信息 ERROR -- 运行错误 FATAL -- 系统崩溃function logit{  mark=$FUN_MARK  level=$1  mesg=$2  TM=`date +'%Y%m%d %H:%M:%S'`  echo "[$TM] [$mark] [$level] [$mesg]"  echo "[$TM] [$mark] [$level] [$mesg]" >> $LOGFILE}# 文件传输函数# 用法: fput  文件名称 (文件名称中没有路径信息),默认传输 $OUTPATH 下的文件function fput{   sleepperiod=$FTPRESTTIME   # 默认间隔时间为 60 秒   if [[ ${#sleepperiod} = 0 || ${sleepperiod} = 0 ]] then      sleepperiod=60   fi   loop=0      if [[ ${#1} = 0 ]] then      logit WARN "文件名称不能为空"      return 1   fi   ftpfile=`basename $1`   # 默认上传 5 次   if [[ ${#RETRYTIMES} = 0 || ${RETRYTIMES} = 0 ]]  then      RETRYTIMES=5   fi   # 进行文件上传,直到到了一定次数或上传成功   while (( loop < RETRYTIMES ))   do      ftp -i -n $OMSIP <<!  > /dev/null 2>/dev/null        user $OMSUSER $OMSPSWD        lcd $OUTPATH        cd  $OMSPATH        bin        put ${ftpfile}        bye!     (( loop = loop + 1 ))     if [[ $? = 0 ]] then        break     else        # 睡眠一段时间        sleep $sleepperiod        continue     fi   done}# 接口文件标题行生成函数#  1) # 标题行组成规则# 服务器号(Server ID),实例号(Instance ID),任务号(Worker ID),时间戳,交易流水号,成功标志,# 错误码,错误信息#  2)# 各个字段解释# 服务器号 为4位字符。# 实例号   2位字符# 任务号 为6位字符,格式是实例号(2位)+ 功能号(4位),节点号与功能号均可为数字与字母# 时间戳,精确到秒,为14位数字# 交易流水号, 任务号+时间戳 为 18 位字符,# 成功标志。 0 -- 成功 1 -- 失败 2 -- 警告信息# 错误码  0000 -- 本次采集成功, 其他 -- 本次采集失败# 错误信息,错误的详细描述信息,主要是 AGENT 程序运行过程中自身的错误。如校数据校验不合法。#  # 错误码与错误信息为 AGENT 使用,主要区分采集任务是否正常结束。如果出现系统异常,则登记异常信息。# 在 OMS 做数据导入的时候,不进行数据的导入。但是可以登记采集任务本身的成功失败情况(交易日志)。# 用法:  headline 返回码  返回信息function headline{  retcode=$1  retmesg=$2  servid=$OMS_SERVER_ID  instid=$OMS_INSTANCE_ID  taskid=$FUN_MARK  # echo OMS_SERVER_ID is  $OMS_SERVER_ID OMS_INSTANCE_ID is  $OMS_INSTANCE_ID    # 时间戳,用来构造 结果文件名称  timestr=`date +'%Y%m%d%H%M%S'`  tran_sqno=${taskid}${timestr}   # 如果返回码以 00 结尾,则认为是执行正确,否则认为错误   if [[ `expr "$retcode" : '^.*\(..\)$'` = "00" ]] then      retflag=0  else     retflag=1  fi  # 构造输出标题串  headstr="${servid}${FLDSEP}${instid}${FLDSEP}${VERSION}${FLDSEP}${taskid}${FLDSEP}${timestr}${FLDSEP}${tran_sqno}${FLDSEP}${retflag}${FLDSEP}${retcode}${FLDSEP}${retmesg}${FLDSEP}"    # 如果没有生成输出文件,构造输出文件名称  if [[ `expr "$FUN_REPORT_FILE" : '.*tmp$'` = 0 ]] then     # 构造输出文件名称     FUN_REPORT_FILE=${FUN_REPORT_FILE}_${timestr}.tmp     outfile=${OUTPATH}/${FUN_REPORT_FILE}     echo "${servid}${FLDSEP}${instid}${FLDSEP}${VERSION}${FLDSEP}${taskid}${FLDSEP}${timestr}${FLDSEP}${tran_sqno}${FLDSEP}${retflag}${FLDSEP}${retcode}${FLDSEP}${retmesg}${FLDSEP}" > $outfile  else     outfile=${OUTPATH}/${FUN_REPORT_FILE}     ex $outfile <<EOF >/dev/null 2>&1     1      s~^.*$~${servid}${FLDSEP}${instid}${FLDSEP}${VERSION}${FLDSEP}${taskid}${FLDSEP}${timestr}${FLDSEP}${tran_sqno}${FLDSEP}${retflag}${FLDSEP}${retcode}${FLDSEP}${retmesg}${FLDSEP}~gxEOF  fi  # echo "outfile is as below"  # cat $outfile  # 构造输出文件#  cat <<! > $outfile#  ${servid}${FLDSEP}${instid}${FLDSEP}${taskid}${FLDSEP}${timestr}${FLDSEP}${tran_sqno}${FLDSEP}${retflag}${FLDSEP}${retcode}${FLDSEP}${retmesg}${FLDSEP}#! }# 明细行写入结果文件function infoline{  if [[ $# = 0 ]] then     return 0  fi  # 输出结果文件,在构造标题行时,文件名称已经生成.  outfile=${OUTPATH}/${FUN_REPORT_FILE}  while [[ $# != 0 ]]  do    echo "${1}${FLDSEP}\c"  >> $outfile    shift  done  printf "\n" >> $outfile  return 0}# 将本任务的结果文件上传到OMS服务器,任务的结果文件${FUN_REPORT_FILE},定义在  fun.cfg 中# 用法: fputheadfunction fputhead{  # 切换到文件上传路径  cd $OUTPATH  cat  ${FUN_REPORT_FILE}  mv ${FUN_REPORT_FILE} ${FUN_REPORT_FILE%.tmp}.txt  FUN_REPORT_FILE=${FUN_REPORT_FILE%.tmp}.txt  gzip ${FUN_REPORT_FILE}  fput ${FUN_REPORT_FILE}.gz  if [[ $? = 0 ]] then     rm -f ${FUN_REPORT_FILE}.gz  fi}# 将本任务的结果文件上传到OMS服务器,任务的结果文件${FUN_REPORT_FILE},定义在  fun.cfg 中# 用法: fputrptfunction fputrpt{  # 切换到文件上传路径  cd $OUTPATH  cat  ${FUN_REPORT_FILE}  mv ${FUN_REPORT_FILE} ${FUN_REPORT_FILE%.tmp}.txt  FUN_REPORT_FILE=${FUN_REPORT_FILE%.tmp}.txt  gzip ${FUN_REPORT_FILE}  fput ${FUN_REPORT_FILE}.gz  if [[ $? = 0 ]] then     rm -f ${FUN_REPORT_FILE}.gz  fi}function  raisetime{  # 输入参数为两个  if [[ ${#} != 2 ]] then     echo "用法 raisetime 原始时间[HHMM] 增量[Minutes]"     return 1  fi  Time=$1  increment=$2  if [[ ${#Time} = 4 ]] then    hour=`expr substr $Time 1 2`    min=`expr substr $Time 3 2`  fi  if [[ `expr $Time : '.*:'` > 0 ]] then    hour=`expr $Time : '\(.*\):.*$`    min=`expr $Time : '.*:\(.*\)$'`  fi#  echo "hour is $hour min is $min incr is $increment"  echo "scale=0 ;( $min + $increment ) % 60 " | bc | read -r reachMin  echo "scale=0 ;( $min + $increment ) / 60 " | bc | read -r addHour  echo "scale=0 ;( $hour + $addHour ) % 24 " | bc | read -r reachHour  echo "scale=0 ;( $hour + $addHour ) / 24 " | bc | read -r addDay  printf "%02s %02s %s\n" ${reachHour} ${reachMin} $addDay  return 0}function	formate_month{		case $1 in		"Jan")			month="01"		;;		"Feb")			month="02"		;;		"Mar")			month="03"		;;		"Apr")			month="04"		;;		"May")			month="05"		;;		"Jun")			month="06"		;;		"Jul")			month="07"		;;		"Aug")			month="08"		;;		"Sep")			month="09"		;;		"Oct")			month="10"		;;		"Nov")			month="11"		;;		"Dec")			month="12"		;;		esac		return 0}function	formate_weekday{		case $1 in		"Mon")			weekday="01"		;;		"Tue")			weekday="02"		;;		"Wed")			weekday="03"		;;		"Thu")			weekday="04"		;;		"Fri")			weekday="05"		;;		"Sat")			weekday="06"		;;		"Sun")			weekday="07"		;;		esac		return 0}# 判断任务是否到启动时刻 # 用法: isReachTime 起始时间 [HHMM|HH:MM]  间隔 [[MM]]  周期标识 # 返回 0 --  到启动时间  1 -- 没有到启动时间  其他 -- 检查错误function isReachTime{  # 检查输入的合法性  if [[ $# != 3 ]] then     # 字段个数不够     echo "isReachTime 起始时间 [HHMM|HH:MM]  间隔 [[MM]]  周期标识"     return 2  fi  if [[ `expr "$1" : '.*:' ` > 0 ]] then    if (( ${#1} != 5 )) ; then       echo "输入起始时间格式错误,格式为 [HHMM|HH:MM]"       return 3    fi  else    if (( ${#1} != 4 )) ; then       echo "输入起始时间格式错误,格式为 [HHMM|HH:MM]"       return 4    fi  fi  startTime=$1  periodTime=$2  periodFlag=$3    # 取当前的时间 HHMM  currTime=`date +'%H%M'`  echo $startTime | tr -d ':' | read -r firstTime#  echo "firstTime is $firstTime"  # 将起始时间转化为自 00:00 之后的分钟数。  firHour=`expr $firstTime : '\(.*\)..$'`  firMin=`expr $firstTime : '.*\(..\)$'`  currHour=`expr $currTime :  '\(.*\)..$'`  currMin=`expr $currTime : '.*\(..\)$'`  #  echo "firHour is $firHour firMin is $firMin currMin is $currMin currHour is $currHour"  startMinutes=`echo " $firHour * 60  +  $firMin" | bc`#  echo "起始分钟数 $startMinutes"   currMinutes=`echo "$currHour * 60 + $currMin" | bc`#  echo "当前分钟数 $currMinutes"#  运行周期标志    periodFlag                 char    1# 0 - 每天多次 1 - 每天一次  2 - 周末 3 - 月末 4 - 年末 5 - 季末 6 - 半年末# 根据运行周期标志    periodFlag 判断是否到了启动时刻  # 计算当前时间和起始时间的间隔的分钟数,然后判断时间间隔正好是运行周期的整数倍

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -