标题: syslog告警处理程序出错,高手帮帮忙 [打印本页] 作者: windpen 时间: 2006-07-26 16:39 标题: syslog告警处理程序出错,高手帮帮忙 告警文件如下
cat /var/adm/messages
Jul 19 10:51:38 10.216.48.1 544: *Nov 14 09:43:11: %LINK-3-UPDOWN: Interface FastEthernet0/9, changed state to up
Jul 19 11:29:16 10.216.48.1 546: *Nov 14 10:20:48: %LINK-3-UPDOWN: Interface FastEthernet0/9, changed state to down
Jul 19 11:30:38 10.216.48.1 548: *Nov 14 10:22:11: %LINK-3-UPDOWN: Interface FastEthernet0/9, changed state to up
其中Ip地址和节点名存在node文件中
cat node
10.216.48.1 node1
10.216.48.2 node3
告警处理程序不断检测告警文件变化,并根据设备端口down时作相应处理。希望输出结果为
node1 port changed state to down
程序为:
cat test.sh
tail -f /var/adm/messages | while read line
do
echo $line |grep "changed state to down"
if [ $? -eq 0 ]; then
IP=`echo $line |grep "changed state to down" | awk '{print $2}'`
Node=`grep $IP node | awk '{print $2}'`
echo "$Node port changed state to down"
fi
done
结果是没有任何输出,这是为什么?
谢谢!作者: windpen 时间: 2006-07-26 16:52
不好意思,程序应该是这样
cat test.sh
tail -f /var/adm/messages | while read line
do
echo $line |grep "changed state to down"
if [ $? -eq 0 ]; then
IP=`echo $line |grep "changed state to down" | awk '{print $4}'`
Node=`grep $IP node | awk '{print $2}'`
echo "$Node port changed state to down"
fi
done
但是还是没输出,为什么?作者: stephen412 时间: 2006-07-26 16:54
我觉得是在 $? 这个地方用的有问题,
这个 $? 是指程序返回的数值阿?
为什么要用这个呢?作者: windpen 时间: 2006-07-26 17:02
问题是,好像这样也没有输出预期中的$line
tail -f /var/adm/messages | while read line
do
echo $line |grep "changed state to down" ;
if [ $? -eq 0 ]; then
echo $line;
fi
done作者: zxr1018 时间: 2006-07-26 17:22
请问这句 echo $line |grep "changed state to down" ;
有没有输出预期结果呢?
感觉没什么问题呀!
[ 本帖最后由 zxr1018 于 2006-7-26 17:26 编辑 ]作者: windpen 时间: 2006-07-26 17:32
程序改为
tail -f /var/adm/messages | while read line
do
echo $line |grep "changed state to down" ;
if [ $? -eq 0 ]; then
echo "alarm!!";
fi
done
则有告警不断输出如下:
Jul 19 11:29:16 10.216.48.1 546: *Nov 14 10:20:48: %LINK-3-UPDOWN: Interface FastEthernet0/9, changed state to down
alarm!!
但是tail -f /var/adm/messages | while read line
do
echo $line |grep "changed state to down" ;
if [ $? -eq 0 ]; then
echo $line;
fi
done
则没有任何显示