Uinx AIX系统下一shell脚本的测试
上一篇 / 下一篇 2011-11-09 18:25:35 / 个人分类:Shell
#进程日志(50-30-02-00-00-013)
#该信息点记录计费系统所有进程的告警日志和关键事件信息,主要用于进程运行监控,为及早发现系统进程运行的异常情况
#信息点要求按高频传送
if [ `ps -afe|grep bossnm_session_log.csh|grep -v grep|wc -l` -gt 1 ]
then
echo `date "+%Y-%m-%d %H:%M:%S"`" 进程日志信息点处理进程已经启动!"
return
fi
if [ `hostname` = "ocs_jf_1" ]; then
WORK_BASE=/ocsjfdata11;export WORK_BASE
HOST_IP="134.96.93.135"
export ORACLE_HOME=/app/oracle
elif [ `hostname` = "ocs_jf_2" ]; then
WORK_BASE=/ocsjfdata21;export WORK_BASE
HOST_IP="134.96.93.136"
export ORACLE_HOME=/app/oracle
elif [ `hostname` = "rhjfp01" ]; then
WORK_BASE=/rhjfdata11;export WORK_BASE
HOST_IP="134.96.93.150"
export ORACLE_HOME=/app/oracle/product/10.2.0/db_1
elif [ `hostname` = "rhjfp02" ]; then
WORK_BASE=/rhjfdata21;export WORK_BASE
HOST_IP="134.96.93.151"
export ORACLE_HOME=/app/oracle/product/10.2.0/db_1
elif [ `hostname` = "ocspstdb2" ]; then
WORK_BASE=/rhjf/mojf;export WORK_BASE
HOST_IP="134.96.93.216"
export ORACLE_HOME=/app/oracle/product/10g
fi
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
ORA_STR=info_28/info_28@pstdb1
WORK_TIME_FILE=$WORK_BASE/data/uploader/bossnm/normal/sessionLog.time
LOG_FILE=$WORK_BASE/data/uploader/bossnm/normal/50-30-02-00-00-013.log
OriPath=`pwd`
#计算前一天日期,如果当日日志中没有找到启、停日志,则在昨天日志中再找下
get_yesterday()
{
echo `sqlplus -s ${ORA_STR} <<END
set pagesize 0 feedback off verify off heading off echo off
SELECT to_char(SYSDATE,'yyyymmdd') FROM dual;
exit;
END`
}
#计算最后一次状态变更时间
get_last_date()
# $LOGDATE,$LOG_FILE,$KEY(启动或停止),$VER(0:taskframe. 1:ecframe)
{
V_LOGDATE=$1 #检查日期
V_LOG_FILE=$2 #检查原始日志文件名
V_KEY=$3 #启动或停止关键字
V_VER=$4 #0:taskframe. 1:ecframe
#taskframe的日志文件的日期是yymmdd(年份只有2位),所以需要对系统时间进行转换
V_LOGDATE=`echo $V_LOGDATE|awk '{print substr($0,3,6)}'`
#重组当日日志文件名
V_LOG_FILE=$V_LOG_FILE$V_LOGDATE"*"
#检查文件是否存在,如果存在则检查是否有启动日志
if [ `ls -1 $V_LOG_FILE|wc -l` -gt 0 ];then
if [ $V_VER -gt 0 ]; then
V_LAST_DATE=`cat "$V_LOG_FILE"|grep "$V_KEY"|awk '{print substr($0,1,4)substr($0,6,2)substr($0,9,2)substr($0,12,2)substr($0,15,2)substr($0,18,2)}'|tail -1`
else
V_LAST_DATE=`cat "$V_LOG_FILE"|grep "$V_KEY"|awk -F" " '{print $2}'|awk -F"." '{print $1}'|awk -F":" '{print $1$2$3}'|tail -1`
if [ ! -z "$V_LAST_DATE" ];then
V_LAST_DATE="20"$V_LOGDATE$V_LAST_DATE
fi
fi
fi
echo $V_LAST_DATE
}
cd $WORK_BASE/data/uploader/bossnm/normal/work/
#每15分钟运行一次
pdate=`date +%Y%m%d`
#取得上次运行的时间
if [ -e $WORK_TIME_FILE ]; then
LastRunTime=`cat $WORK_TIME_FILE`
else #如果没有保存上次的时间,则默认取当日0点
LastRunTime=`sqlplus -s $ORA_STR <<END
set pagesize 0 feedback off verify off heading off echo off
SELECT to_char(trunc(SYSDATE),'yyyymmddhh24miss') FROM dual;
exit;
END`
fi
nowRunTime=`sqlplus -s $ORA_STR <<END
set pagesize 0 feedback off verify off heading off echo off
SELECT to_char(SYSDATE,'yyyymmddhh24miss') FROM dual;
exit;
END`
echo 'Last='$LastRunTime' now='$nowRunTime
pdate=`expr substr $nowRunTime 1 8`
#根据系统时间计算文件序号。
iSerialNo=`sqlplus -s $ORA_STR <<END
set pagesize 0 feedback off verify off heading off echo off
select lpad(substr(datt, 9, 2)*4+ceil((substr(datt, 11, 2)*60+substr(datt, 13, 2))/(15*60)),8,'0') from (select TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') as datt from dual)
exit;
END`
#如果序号=00000000需要调整为00000001
if [ "$iSerialNo" -eq "00000000" ];then
iSerialNo="00000001"
fi
#带序号的文件名称
sFileName="BOSSNM.50-30-02-00-00-013.3002.$pdate.$iSerialNo.0.5710"
#先删除临时文件
if [ -f "_temp_50-30-02-xx-00-013" ];then
rm _temp_50-30-02-xx-00-013
fi
LOGDATE=`date +%Y%m%d`
sqlite3 BOSSNM 'select ps_id ||"|"||trim(ps_name)||"|"||trim(ps_key_name)||"|"||trim(ps_host_user)||"|"||ps_status||"|"||strftime("%Y%m%d%H%M%S",ps_status_time)||"|"||trim(ps_prg_name)||"|"||trim(log_file)||"|"||trim(stop_key)||"|"||trim(start_key)||"|"from bu_session_log where is_check=1 AND trim(ps_host_ip) = '${HOST_IP}' order by ps_id' >tmp.session.log.cfg
#读取监控列表文件
while read CFG_LINE
do
#跳过空行
if [ "$CFG_LINE" = "" ];then
continue;
fi
PS_ID=`echo $CFG_LINE|awk -F'|' '{print $1}'`
PS_NAME=`echo $CFG_LINE|awk -F'|' '{print $2}'`
PS_KEY_NAME=`echo $CFG_LINE|awk -F'|' '{print $3}'`
PS_HOST_USER=`echo $CFG_LINE|awk -F'|' '{print $4}'`
PS_STATUS=`echo $CFG_LINE|awk -F'|' '{print $5}'`
PS_STATUS_TIME=`echo $CFG_LINE|awk -F'|' '{print $6}'`
PS_PRG_NAME=`echo $CFG_LINE|awk -F'|' '{print $7}'`
LOG_FILE=`echo $CFG_LINE|awk -F'|' '{print $8}'`
STOP_KEY=`echo $CFG_LINE|awk -F'|' '{print $9}'`
START_KEY=`echo $CFG_LINE|awk -F'|' '{print $10}'`
echo $PS_STATUS
#进程检查
NUM=`ps -ef|grep "$PS_HOST_USER"|grep "$PS_PRG_NAME"|grep "$PS_KEY_NAME"|grep -v grep|wc -l`
echo 'ps -ef结果'$PS_HOST_USER"-"$PS_PRG_NAME"("$PS_KEY_NAME"):"$NUM
#进程最新启动
if [ "$NUM" != "0" -a "$PS_STATUS" = "0" ];then
#查进程日志,找到最近的启动时间
V_LAST_DATE=`get_last_date "$LOGDATE" "$LOG_FILE" "$START_KEY"`
if [ -z "$V_LAST_DATE" ];then
LOGDATE=`get_yesterday`
V_LAST_DATE=`get_last_date "$LOGDATE" "$LOG_FILE" "$START_KEY"`
fi
echo '$PS_KEY_NAME='$PS_KEY_NAME',$LOGDATE='$LOGDATE
#如果两天都找不到启、停时间,就设置为系统当前时间
echo V_LAST_DATE=$V_LAST_DATE
if [ -z "$V_LAST_DATE" ];then
V_LAST_DATE=`date +%Y%m%d%H%M%S`
fi
#日志中提取的日期比表中保存的日期晚,就以日志文件的时间、状态更新表,并生成上发数据
if [ "$V_LAST_DATE" -gt "$PS_STATUS_TIME" ];then
echo "0|3|||启动$PS_NAME进程||$V_LAST_DATE" >>./_temp_50-30-02-xx-00-013
fi
fi
#进程最新停止
if [ "$NUM" = "0" -a "$PS_STATUS" = "1" ];then
#查进程日志,找到最近的停止时间
V_LAST_DATE=`get_last_date "$LOGDATE" "$LOG_FILE" "$STOP_KEY"`
echo '$V_LAST_DATE'=$V_LAST_DATE >>$LOG_FILE
if [ -z "$V_LAST_DATE" ];then
LOGDATE=`get_yesterday`
V_LAST_DATE=`get_last_date "$LOGDATE" "$LOG_FILE" "$STOP_KEY"`
fi
#如果两天都找不到启、停时间,就设置为系统当前时间
if [ -z "$V_LAST_DATE" ];then
V_LAST_DATE=`date +%Y%m%d%H%M%S`
fi
#日志中提取的日期比表中保存的日期晚,就以日志文件的时间、状态更新表,并生成上发数据
if [ "$V_LAST_DATE" -gt "$PS_STATUS_TIME" ];then
echo '$V_LAST_DATE='$V_LAST_DATE',$PS_STATUS_TIME='$PS_STATUS_TIME'需要更新'>>$LOG_FILE
sqlite3 BOSSNM 'update bu_session_log set ps_status=0,ps_status_time="'$V_LAST_DATE'" where ps_host_ip="'$PS_HOST_IP'" and ps_key_name="'$PS_KEY_NAME'"'
'
echo "0|3|||停止$PS_NAME进程||$V_LAST_DATE" >>./_temp_50-30-02-xx-00-013
fi
fi
done<tmp.session.log.cfg
#如果没有启停日志,则先生成空文件
if [ ! -e "_temp_50-30-02-xx-00-013" ];then
touch ./_temp_50-30-02-xx-00-013
&nb
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | ||||||||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 |
我的存档
数据统计
- 访问量: 104439
- 日志数: 53
- 图片数: 1
- 建立时间: 2010-10-15
- 更新时间: 2016-09-27