- 论坛徽章:
- 145
|
本帖最后由 jason680 于 2011-09-08 09:10 编辑
回复 jason680
jason680大大,您好,你给我的建议中,Rec=100,n=(n+1)%Rec是用来做什么的? 能稍 ...
bzbenjoy 发表于 2011-09-07 20:54 ![]()
基本上Rec它是用来限制数组大小用的....
因为一般log纪录,可能会很多....
就如你说,当你找到pid: xxxx Failed时,前面CMD的纪录已经过了....
root : CMD ( /usr/run_ssa_encl_healthcheck) : PID ( 327904 ) : Tue Sep 5 15:30:00 2011
root : CMD ( /u33/admin/check_icmrm.sh ) : PID ( 303494 ) : Tue Sep 5 15:30:00 2011
Cron Job with pid: 327904 Successful
Cron Job with pid: 303494 Failed
一般我们使用的方法,就是先把CMD存下来(放在数组中)
但在log中CMD的纪录有可能很多,会影响效率....
所以我想到的方法就是限制数组大小
Rec=100
n =(n+1)%Rec
n为0时, 执行结果 n=1
n为1时, 执行结果 n=2
...
n为98时, 执行结果 n=99
n为99时, 执行结果 n=0
n为99, n+1为100, 因为多了%Rec (等同%100),
结果n又为0,纪录又从头开始.
刚刚在写说明时发现,这可能有个bug(但也有可能没问题)
root : CMD ( /u33/admin/check_xxxxx.sh) : PID ( 303494 ) : Mon Sep 5 13:30:00 2011
Cron Job with pid: 303494 Successful
....
root : CMD ( /usr/run_ssa_encl_healthcheck) : PID ( 327904 ) : Mon Sep 5 15:30:00 2011
root : CMD ( /u33/admin/check_icmrm.sh ) : PID ( 303494 ) : Mon Sep 5 15:30:00 2011
Cron Job with pid: 327904 Successful
Cron Job with pid: 303494 Failed
303494 Failed有可能会匹配到,前面的纪录.(但这只有在PID会相同的情形下)
==================================================
另外一个不比较不影响效率,也不用限制CMD纪录数组的方法,又不会有以上bug的方法.
就是今天是Sep 6时,先算出前一天(Sep 5)日期,仍后在纪录CMD时,先检查是否为Sep 5
if($2=="CMD"
改为if($2=="CMD" && d1==sprintf("%s %2d",$7,$ )
这样后面就不须要限制数组大小(因为前一天的CMD纪录,就会比较少了),直接
a[$5] = $0 # $5 为PID号码,不必限制数组大小,且PID重复时,后一个会盖过前一个
最后
if($6=="Failed"&&a[$5]!=""){print a[$5]"\n"$0}
else{print "cannot find the PID record in CMD"} |
|