Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19267130
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-11-04 10:21:49

一、实际需求
在应用各种软件(比如:、、sitescope等)的时候,我一般都会用到它的email阀值功能。如果这时候再加上一个 在线监控机器人为你把关,第一时间给你发出msn报警信息,是不是能让你更快的处理问题呢。以下我为大家介绍一个msn command line 的小程序来这个功能。
软件地址:sendMsg.zip(6.54 KB)

二、运行环境
一个支持的系统环境就可以啦,当然要能上网,不然怎么发消息呢。
我的做法是和cacti监控服务器放一起,不需要额外的设备和资源投入。
注册一个msn的帐号用于监控机器人。比如:test@test.com 密码:123456
需要收到消息的msn帐号必须加监控帐号test@test.com为好友,不然收不到消息。

三、sendMsg用法
sendMsg.zip包中所有如下:

# ls -l sendMsg/
-
rw-r--r--1root1213Jul29 2007index.php//测试页面,web中打开开始测试;很容易做。
-
rw-r--r--1rootroot3894Jul29 2007msnpauth-1.1.3.php
-
rw-r--r--1rootroot3372Jul29 2007msnpauth.php
-
rw-r--r--1rootroot4586Jul29 2007sendMsg.php
-
rw-r--r--1rootroot 223Jul29 2007simple.php
-
rw-r--r--1rootroot1424Jul29 2007template.tpl

该程序也是通过登录msn服务器、建立IM会话,发送消息;
基本PHP语法如下:

$sendMsg=newsendMsg();
$sendMsg->login('test@test.com','123456');
//刚才建立的用于举例的
msn监控机器人帐号
$sendMsg->createSession('recipient@hotmail.com');
//接受信息人的
msn帐号
$sendMsg->sendMessage('message','Times New Roman','FF0000');
//第一个是具体信息内容,后面可以设定字体和颜色;
$sendMsg->sendMessage(iconv("GBK","UTF-8", 测试),'Times New Roman','008000');
//也利用
iconv转换gbkutf8来发送信息;

效果如下:

四、实际应用
这里是我自己写的一个应用发送msn信息的php脚本:仅供参考,如果大家有更好请和我交流。

#!/usr/bin/php
if($argc!=3){
die("Usage: send_cndmonitor.php n");
}
array_shift($argv);
$msnaddr=$argv[0];
$messages=$argv[1];
include('sendMsg.php');
$sendMsg=newsendMsg();
$sendMsg->login('test@test.com','123456');
$sendMsg->createSession($msnaddr);
$sendMsg->sendMessage($messages,'Times New Roman','008000');
?>

主要是为了能被其他调用,用于发送一个报警信息。缺点是不能判定错误,所以实际运用中存在故障,需要网络流畅的环境下使用。

我们的生产环境已经存在大量的监控系统,所以针对错误信息已经整理到数据库中,因此我只需要从数据库导出目前存在error信息的文本文件,然后根据节点位置发送给相关维护负责人即可。

为了能判定和确保发送正确,我利用sendMsg中的index.php的页面和脚本相结合来循环发送,实在抱歉本人PHP程度有限;
脚本如下:(这是我实例中使用的一个工作脚本,仅供大家借鉴)

#!/bin/sh
wget--user=monitor--password=123456http://127.0.0.1/monitor/msn.txt-O/var/www/html/sendMsg/msn.txt.1>/dev/null2>&1
#下载msn要发送的信息,因为页面都是认证的所以用了wget的user和password;
now=`date +%Y-%m-%d-%H:%M`
[-f/var/www/html/sendMsg/msn.txt]&&oldmd5=`md5sum var/www/html/sendMsg/msn.txt |awk '{print$1}' |tee /var/log/cdn_status_old.md5`||exit0
[-f/var/www/html/sendMsg/msn.txt.1]&&newmd5=`md5sum var/www/html/sendMsg/msn.txt.1 |awk '{print$1}' |tee /var/log/cdn_status_new.md5`||exit0
SA=(admin1admin2admin3admin4)
# 相关负责人列表和下载的msn信息的中的名字对应;
msnaddr=(admin1@msn.comadmin2@msn.comadmin3@msn.comadmin4@msn.com)
# 相关负责人的msn帐号和SA变量中的的名字顺序一一对应;
sendMsg()
{
num=0
while[$num-lt1];
do
wget--post-data"sender=test@test.com&password=123456&recipient=${1}&message=${2}"http://127.0.0.1/sendMsg/index.php-O/var/www/html/sendMsg/index.php.1>/dev/null2>&1
# 使用wget post-data发送post参数给index.php页面,用以发送msn信息。
if[-f/var/www/html/sendMsg/index.php.1];then
ifcat/var/www/html/sendMsg/index.php.1|grep-isuccessfully>/dev/null2>&1;then
num=1#判断信息发送成功
elifcat/var/www/html/sendMsg/index.php.1|grep-i"The user appears to be offline">/dev/null2>&1;then
num=1#判断msn接受人为是否在线状态
echo"The user is offline."
exit0
elifcat/var/www/html/sendMsg/index.php.1|grep-i"Something went wrong trying to connect to the server">/dev/null2>&1;then
num=1#判断msn 服务器存在连接问题
echo"MSN server is wrong."
exit0
else
num=0#除了以上三种情况退出循环外,其他情况重试。
fi
rm-f/var/www/html/sendMsg/index.php.1
else
num=0
fi
done
}
 
if[[$oldmd5==$newmd5]];then#校验msn的信息是否是已经发送过的,主要是为了不重复发送错误信息。
rm-f/var/www/html/sendMsg/msn.txt.1
exit0
else
mv/var/www/html/sendMsg/msn.txt/var/www/html/sendMsg/bak/msn$now.txt-f
mv/var/www/html/sendMsg/msn.txt.1/var/www/html/sendMsg/msn.txt-f
#备份已发送的msn错误信息
 
fi
 
foriin`seq 0 1 3`#根据维护人员的数量进行判断和循环
do
ifcat/var/www/html/sendMsg/msn.txt|grep-i${SA[$i]};then
messages=`cat /var/www/html/sendMsg/msn.txt |grep -i ${SA[$i]}`
sendMsg"${msnaddr[$i]}""$messages"
else
continue
fi
done

加入到每5分钟执行一次;考虑维护人员的上线时间(最好是24H值班msn,那就不存在这个问题)设定执行时间为每周1到5的9点到18点;

*/59-18* *1-5/var/www/html/sendMsg/send_report.sh

实际应用大家可以根据自己的情况进行调整,我这里只是告诉大家怎么使用sendmsg,举了一个简单的实例帮助大家理解和应用。

如果懂php语言的可以把这个作为cacti的一个插件使用,那样效果就更棒啦~

阅读(836) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~