<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post//</link>
<title><![CDATA[Linux服务器监控系统 ServMon V1.0]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[开源世界]]></category>
<pubDate>Fri, 20 May 2011 13:56:26 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//</guid> 
<description>
<![CDATA[ 
	　　我管理服务器太多了，不可能每时每刻都登录到上面查看服务器状况，于是写了一个“服务器监控系统 ServMon V1.0”。其原理是用shell脚本定时抓取被监控服务器上信息，再用curl POST到监控机的PHP接口程序上，由PHP接口程序对信息进行分析，如果存在异常，则发送报警邮件给管理员。<br/><br/>　　下午，ServMon V1.0 已经在sina播客服务器上部署，以下为ServMon的删节版内容，只监控磁盘分区使用率和Swap交换空间两项：<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=41" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=41" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　　1、被监控端服务器的shell脚本（Linux）<br/>　　(1)、发送磁盘分区使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">/usr/local/servmon/bin/diskstat_send<br/>#!/bin/sh<br/>LANG=zh_cn<br/>disk=$(/bin/df -kP &#124; grep / &#124; awk -F ' ' ' &#123;print $6":"$5&#125;' &#124; awk -F '%' ' &#123;print $1&#125;' &#124; tr -s '&#92;n' ';')<br/>today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")<br/>ip=$(/sbin/ifconfig &#124; grep "inet addr" &#124; grep -v "127.0.0.1" &#124; awk '&#123;print $2;&#125;' &#124; awk -F':' '&#123;print $2;&#125;' &#124; tr -s '&#92;n' ';')<br/>/usr/bin/curl -d menu=diskstat -d password=$2 -d date=$today -d ip=$ip -d data=$disk $1</div></div><br/>磁盘分区使用率监控报警邮件示例图：<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=42" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=42" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　　(2)、发送Swap交换空间使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本<br/>　　/usr/local/servmon/bin/swapstat_send<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">#!/bin/sh<br/>LANG=zh_cn<br/>data=$(/usr/bin/free -m &#124; grep Swap &#124; awk '&#123;print $2":"$3":"$4&#125;')<br/>today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")<br/>ip=$(/sbin/ifconfig &#124; grep "inet addr" &#124; grep -v "127.0.0.1" &#124; awk '&#123;print $2;&#125;' &#124; awk -F':' '&#123;print $2;&#125;' &#124; tr -s '&#92;n' ';')<br/>/usr/bin/curl -d menu=swapstat -d password=$2 -d date=$today -d ip=$ip -d data=$data $1</div></div><br/>Swap交换空间使用率监控报警邮件示例图：<br/><a href="http://www.zhanghaijun.com/attachment.php?fid=43" target="_blank"><img src="http://www.zhanghaijun.com/attachment.php?fid=43" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　　(3)、计划任务：每30分钟将磁盘分区使用率发送给监控端接口，每10分钟将Swap交换空间使用率发送给监控端接口。<br/>　　/etc/cron.d/servmon<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">0-30/30 * * * * root /bin/sh /usr/local/servmon/bin/diskstat_send http://192.168.0.28/servmon/interface.php yourpassword<br/>0-50/10 * * * * root /bin/sh /usr/local/servmon/bin/swapstat_send http://192.168.0.28/servmon/interface.php yourpassword</div></div><br/>　　2、监控端服务器配置（Linux）<br/>　　(1)、启动sendmail<br/>　　/usr/sbin/sendmail -bd -q30m<br/>　　-b：指定Sendmail在后台运行，并且监听端口25的请求。<br/>　　-d：指定Sendmail以Daemon方式运行（守护进程）。<br/>　　-q：当Sendmail无法将邮件成功地发送到目的地时，它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。其中的30m表示保留30分钟。<br/><br/>　　(2)、修改php.ini的[mail function]部分为以下内容，然后重启Apache，使PHP能够使用mail()函数发送电子邮件<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">[mail function]<br/>; For Win32 only.<br/>;SMTP = localhost<br/>;smtp_port = 25<br/><br/>; For Win32 only.<br/>;sendmail_from = me@example.com<br/><br/>; For Unix only.&nbsp;&nbsp;You may supply arguments as well (default: "sendmail -t -i").<br/>sendmail_path = /usr/sbin/sendmail -t -i</div></div><br/>　　(4)、在MySQL上创建一个数据库servmon，然后在该数据库中执行以下SQL语句创建表：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">CREATE TABLE `tb_diskstat` (<br/>&nbsp;&nbsp;`ip` varchar(128) NOT NULL default '',<br/>&nbsp;&nbsp;`date` int(10) NOT NULL default '0',<br/>&nbsp;&nbsp;UNIQUE KEY `ip` (`ip`)<br/>) TYPE=MyISAM;</div></div><br/>　　备注：这张表是PHP接口程序用来记录发送磁盘分区报警邮件的时间，避免在一段时间内重复发送大量报警邮件的，其实完全可以用Session、文本文件来代替它。这里之所以用MySQL数据库，是因为PHP接口中还将增加一些需要记录信息到数据库的监控模块，所以就统一用数据库了。）<br/><br/>　　(3)、PHP接口程序<br/>　　http://192.168.0.28/servmon/interface.php<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/><?php&nbsp;&nbsp;<br/>/** <br/>********************************************************************* <br/>* Copyright (c) 2007, 回忆未来[张宴] <br/>* All rights reserved. <br/>* <br/>* 文件名称： interface.php <br/>* 摘&nbsp;&nbsp;&nbsp;&nbsp;要： 服务器监控系统ServMon接口程序 <br/>* 描&nbsp;&nbsp;&nbsp;&nbsp;述： <br/>* 作&nbsp;&nbsp;&nbsp;&nbsp;者： 张宴&nbsp;&nbsp;新浪UC：103500&nbsp;&nbsp;博客：blog.s135.com <br/>* 版&nbsp;&nbsp;&nbsp;&nbsp;本： 1.0 <br/>* 时&nbsp;&nbsp;&nbsp;&nbsp;间： 2007-08-03 <br/>********************************************************************* <br/>*/&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>//------------------配置信息------------------&nbsp;&nbsp;<br/>$password = "yourpassword";//设置数据传输验证密码&nbsp;&nbsp;<br/>$mysql_server = "127.0.0.1:3306";//MySQL服务器地址及端口，例如localhost:3306&nbsp;&nbsp;<br/>$mysql_db = "servmon";//MySQL数据库名&nbsp;&nbsp;<br/>$mysql_username = "root";//MySQL帐号&nbsp;&nbsp;<br/>$mysql_password = "";//MySQL密码&nbsp;&nbsp;<br/>$disk_max = "90";//磁盘分区使用百分比超过此值，则报警。默认为90%&nbsp;&nbsp;<br/>$disk_sendmail_interval = "43200";//如果同一台服务器连续报警，设置每隔多少秒发送一次报警邮件。默认为43200秒，即12小时。&nbsp;&nbsp;<br/>$swap_max = "50";//Swap交换空间使用百分比超过此值，则报警。默认为50%&nbsp;&nbsp;<br/>$email = "servmon@sina.com";//管理员邮箱&nbsp;&nbsp;<br/>//--------------------------------------------&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>//密码验证&nbsp;&nbsp;<br/>if (htmlspecialchars($_POST["password"]) != $password)&nbsp;&nbsp;<br/>&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo "数据传输验证密码错误！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit();&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>//磁盘分区报警（分区使用率超过90%后会发邮件报警）&nbsp;&nbsp;<br/>if (htmlspecialchars($_POST["menu"]) == "diskstat")&nbsp;&nbsp;<br/>&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$is_send_mail = "0";//是否发邮件，0为不发邮件&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$date = htmlspecialchars($_POST["date"]);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip = htmlspecialchars($_POST["ip"]);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$data = htmlspecialchars($_POST["data"]);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$subject = "[系统监控]_磁盘分区空间不足_" . $ip;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = "服务器监控系统 ServMon V1.0&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警服务器：" . $ip . "&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警时间：" . $date . "&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警内容：&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers = 'From: ServMon <servmon@sina.com>' . "&#92;r&#92;n" .&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Reply-To: ServMon <servmon@sina.com>' . "&#92;r&#92;n" . 'X-Mailer: PHP/' . phpversion();&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$arr1 = explode(";", $data);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ($arr1 as $key1 => $value1)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr2 = explode(":", $value1);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足（空间使用率达到" . $arr2[1] . "%）&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$is_send_mail = "1";//是否发邮件，1为发送邮件&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($is_send_mail == "1")&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$connect = mysql_connect($mysql_server, $mysql_username, $mysql_password);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$select = mysql_select_db($mysql_db, $connect);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$select_result = mysql_query("SELECT date FROM tb_diskstat WHERE ip='" . $ip .&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"' LIMIT 1");&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$rs = mysql_fetch_array($select_result);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$interval = date("U") - $rs["date"];&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($interval >= $disk_sendmail_interval)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mail($email, $subject, $message, $headers))&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "已成功发送报警邮件！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "发送报警邮件失败！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$insert_result = mysql_query("REPLACE INTO tb_diskstat (ip, date) VALUES ('" . $ip .&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"', '" . date("U") . "');");&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($disk_sendmail_interval >= 3600)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$disk_sendmail_interval_text = $disk_sendmail_interval / 3600 . "小时";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$disk_sendmail_interval_text = $disk_sendmail_interval . "秒";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "已发送过报警邮件，" . $disk_sendmail_interval_text . "内不再重复发送！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "磁盘分区空间足够，无须发送报警邮件！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit();&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>//Swap交换空间报警（Swap交换空间使用率超过60%后会发邮件报警）&nbsp;&nbsp;<br/>if (htmlspecialchars($_POST["menu"]) == "swapstat")&nbsp;&nbsp;<br/>&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$is_send_mail = "0";//是否发邮件，0为不发邮件&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$date = htmlspecialchars($_POST["date"]);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ip = htmlspecialchars($_POST["ip"]);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;list($total, $used, $free) = split(":", htmlspecialchars($_POST["data"]));&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$percentage = round($used / $total * 100, 0);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$subject = "[系统监控]_Swap交换空间使用率高达" . $percentage . "%_" . $ip;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = "服务器监控系统 ServMon V1.0&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警服务器：" . $ip . "&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警时间：" . $date . "&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "-------------------------------------------------------&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "报警内容：&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$headers = 'From: ServMon <servmon@sina.com>' . "&#92;r&#92;n" .&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Reply-To: ServMon <servmon@sina.com>' . "&#92;r&#92;n" . 'X-Mailer: PHP/' . phpversion();&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$arr1 = explode(";", $data);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ($arr1 as $key1 => $value1)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr2 = explode(":", $value1);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足（空间使用率达到" . $arr2[1] . "%）&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$is_send_mail = "1";//是否发邮件，1为发送邮件&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($percentage >= $swap_max)&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●Swap交换空间使用率高达" . $percentage . "%，若继续增加到100%可能会导致服务器死机。&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●Swap交换空间总量：" . $total . " MB&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●Swap交换空间使用：" . $used . " MB&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$message = $message . "●Swap交换空间剩余：" . $free . " MB&#92;r&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$is_send_mail = "1";//是否发邮件，1为发送邮件&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($is_send_mail == "1")&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mail($email, $subject, $message, $headers))&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "已成功发送报警邮件！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "发送报警邮件失败！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "Swap交换空间使用率不高，无须发送报警邮件！&#92;n";&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit();&nbsp;&nbsp;<br/>&#125;&nbsp;&nbsp;<br/>?></div></div><br/>文章来源：http://blog.s135.com/post/276/<br/>Tags - <a href="http://www.zhanghaijun.com/tags/servmon/" rel="tag">servmon</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post//#blogcomment</link>
<title><![CDATA[[评论] Linux服务器监控系统 ServMon V1.0]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>