linux 服务器监控系统的开发

  ServMon的原理是用shell脚本定时抓取被监控Linux服务器上的信息,再用curl POST到监控机的PHP接口程序上,由PHP接口程序对信息进行分析,如果存在异常,则发送报警邮件给管理员。报警邮件演示页面请见:http://blog.s135.com/read.php/276.htm

  

  ServMon V1.1 在 1.0 的基础上,增加了对Linux系统负载的监控,并编写了客户端自动安装包:

  1、被监控端服务器(Linux)
  (1)、下载并安装ServMon Client

引用
wget  http://blog.s135.com/soft/linux/servmon/servmon-1.1.linux.tar.gz
tar zxvf servmon-1.1.linux.tar.gz
cd servmon-1.1
./install -i  http://yourdomain/servmon/interface.php password


  注:此处的password为interface.php程序中设置的数据传输验证密码。

  客户端安装包源码:
  │
  ├─install
  ├─[src]
  │  ├─[bin]
  │  │  ├─diskstat_send
  │  │  ├─loadstat_send
  │  │  └─swapstat_send
  │  ├─[cron]
  │  │  └─servmon
  │  └─[data]

  屏幕演示:
  




  2、监控端服务器配置(Linux)
  (1)、启动sendmail
  /usr/sbin/sendmail -bd -q30m
  -b:指定Sendmail在后台运行,并且监听端口25的请求。
  -d:指定Sendmail以Daemon方式运行(守护进程)。
  -q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。其中的30m表示保留30分钟。

  (2)、修改php.ini的[mail function]部分为以下内容,然后重启Apache,使PHP能够使用mail()函数发送电子邮件

引用
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i



  (4)、在MySQL上创建一个数据库servmon,然后在该数据库中执行以下SQL语句创建表:

引用
CREATE TABLE `tb_diskstat` (
 `ip` varchar(128) NOT NULL default '',
 `date` int(10) NOT NULL default '0',
 UNIQUE KEY `ip` (`ip`)
) TYPE=MyISAM;


  备注:这张表是PHP接口程序用来记录发送磁盘分区报警邮件的时间,避免在一段时间内重复发送大量报警邮件的。

  (3)、PHP接口程序
  http://yourdomain/servmon/interface.php

  1. <?php     
  2. /**   
  3. *********************************************************************   
  4. * Copyright (c) 2007, 回忆未来[张宴]   
  5. * All rights reserved.   
  6. *   
  7. * 文件名称: interface.php   
  8. * 摘    要: 服务器监控系统ServMon接口程序   
  9. * 描    述:   
  10. * 作    者: 张宴  新浪UC:103500  博客:blog.s135.com   
  11. * 版    本: 1.1   
  12. * 时    间: 2007-08-31   
  13. *********************************************************************   
  14. */    
  15.     
  16. //------------------配置信息------------------     
  17. $password = "yourpassword";//设置数据传输验证密码,ServMon客户端安装时需要指定此密码     
  18. $mysql_server = "127.0.0.1:3306";//MySQL服务器地址及端口,例如localhost:3306     
  19. $mysql_db = "servmon";//MySQL数据库名     
  20. $mysql_username = "root";//MySQL帐号     
  21. $mysql_password = "";//MySQL密码     
  22. $disk_max = "90";//磁盘分区使用百分比超过此值,则报警。默认为90%     
  23. $disk_sendmail_interval = "43200";//如果同一台服务器连续报警,设置每隔多少秒发送一次报警邮件。默认为43200秒,即12小时。     
  24. $swap_max = "50";//Swap交换空间使用百分比超过此值,则报警。默认为50%     
  25. $email = "webmaster@s135.com,info@s135.com";//管理员邮箱,多个邮箱以逗号分割     
  26. //--------------------------------------------     
  27.   
  28. //密码验证  
  29. if (htmlspecialchars($_POST["password"]) != $password)  
  30. {  
  31.     echo "数据传输验证密码错误!/n";  
  32.     exit();  
  33. }  
  34.   
  35. //磁盘分区报警(分区使用率超过90%后会发邮件报警)  
  36. if (htmlspecialchars($_POST["menu"]) == "diskstat")  
  37. {  
  38.     $is_send_mail = "0";//是否发邮件,0为不发邮件  
  39.     $date = htmlspecialchars($_POST["date"]);  
  40.     $ip = htmlspecialchars($_POST["ip"]);  
  41.     $data = htmlspecialchars($_POST["data"]);  
  42.     $arr1 = explode(";"$data);  
  43.     foreach ($arr1 as $key1 => $value1)  
  44.     {  
  45.         $arr2 = explode(":"$value1);  
  46.         if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)  
  47.         {  
  48.             $subject = "[系统监控]_磁盘分区空间不足_" . $ip;  
  49.             $message = "服务器监控系统 ServMon V1.1/r/n";  
  50.             $message = $message . "-------------------------------------------------------/r/n";  
  51.             $message = $message . "报警服务器:" . $ip . "/r/n";  
  52.             $message = $message . "-------------------------------------------------------/r/n";  
  53.             $message = $message . "报警时间:" . $date . "/r/n";  
  54.             $message = $message . "-------------------------------------------------------/r/n";  
  55.             $message = $message . "报警内容:/r/n";  
  56.             $message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足(空间使用率达到" . $arr2[1] . "%)/r/n";  
  57.             $headers = 'From: ServMon <servmon@sina.com>' . "/r/n" .  
  58.                 'Reply-To: ServMon <servmon@sina.com>' . "/r/n" . 'X-Mailer: PHP/' . phpversion();  
  59.             $is_send_mail = "1";//是否发邮件,1为发送邮件  
  60.         }  
  61.     }  
  62.     if ($is_send_mail == "1")  
  63.     {  
  64.         $connect = mysql_connect($mysql_server$mysql_username$mysql_password);  
  65.         $select = mysql_select_db($mysql_db$connect);  
  66.         $select_result = mysql_query("SELECT date FROM tb_diskstat WHERE ip='" . $ip .  
  67.             "' LIMIT 1");  
  68.         $rs = mysql_fetch_array($select_result);  
  69.         $interval = date("U") - $rs["date"];  
  70.         if ($interval >= $disk_sendmail_interval)  
  71.         {  
  72.             if (mail($email$subject$message$headers))  
  73.             {  
  74.                 echo "已成功发送报警邮件!/n";  
  75.             }  
  76.             else  
  77.             {  
  78.                 echo "发送报警邮件失败!/n";  
  79.             }  
  80.             $insert_result = mysql_query("REPLACE INTO tb_diskstat (ip, date) VALUES ('" . $ip .  
  81.                 "', '" . date("U") . "');");  
  82.         }  
  83.         else  
  84.         {  
  85.             if ($disk_sendmail_interval >= 3600)  
  86.             {  
  87.                 $disk_sendmail_interval_text = $disk_sendmail_interval / 3600 . "小时";  
  88.             }  
  89.             else  
  90.             {  
  91.                 $disk_sendmail_interval_text = $disk_sendmail_interval . "秒";  
  92.             }  
  93.             echo "已发送过报警邮件," . $disk_sendmail_interval_text . "内不再重复发送!/n";  
  94.         }  
  95.   
  96.     }  
  97.     else  
  98.     {  
  99.         echo "磁盘分区空间足够,无须发送报警邮件!/n";  
  100.     }  
  101.     exit();  
  102. }  
  103.   
  104. //Swap交换空间报警(Swap交换空间使用率超过60%后会发邮件报警)  
  105. if (htmlspecialchars($_POST["menu"]) == "swapstat")  
  106. {  
  107.     $is_send_mail = "0";//是否发邮件,0为不发邮件  
  108.     $date = htmlspecialchars($_POST["date"]);  
  109.     $ip = htmlspecialchars($_POST["ip"]);  
  110.     list($total$used$free) = split(":", htmlspecialchars($_POST["data"]));  
  111.     $percentage = round($used / $total * 100, 0);  
  112.     if ($percentage >= $swap_max)  
  113.     {  
  114.         $subject = "[系统监控]_Swap交换空间使用率高达" . $percentage . "%_" . $ip;  
  115.         $message = "服务器监控系统 ServMon V1.1/r/n";  
  116.         $message = $message . "-------------------------------------------------------/r/n";  
  117.         $message = $message . "报警服务器:" . $ip . "/r/n";  
  118.         $message = $message . "-------------------------------------------------------/r/n";  
  119.         $message = $message . "报警时间:" . $date . "/r/n";  
  120.         $message = $message . "-------------------------------------------------------/r/n";  
  121.         $message = $message . "报警内容:/r/n";  
  122.         $message = $message . "●Swap交换空间使用率高达" . $percentage . "%,若继续增加到100%可能会导致服务器死机。/r/n";  
  123.         $message = $message . "●Swap交换空间总量:" . $total . " MB/r/n";  
  124.         $message = $message . "●Swap交换空间使用:" . $used . " MB/r/n";  
  125.         $message = $message . "●Swap交换空间剩余:" . $free . " MB/r/n";  
  126.         $headers = 'From: ServMon <servmon@sina.com>' . "/r/n" .  
  127.             'Reply-To: ServMon <servmon@sina.com>' . "/r/n" . 'X-Mailer: PHP/' . phpversion();  
  128.         $is_send_mail = "1";//是否发邮件,1为发送邮件  
  129.     }  
  130.     if ($is_send_mail == "1")  
  131.     {  
  132.         if (mail($email$subject$message$headers))  
  133.         {  
  134.             echo "已成功发送报警邮件!/n";  
  135.         }  
  136.         else  
  137.         {  
  138.             echo "发送报警邮件失败!/n";  
  139.         }  
  140.     }  
  141.     else  
  142.     {  
  143.         echo "Swap交换空间使用率不高,无须发送报警邮件!/n";  
  144.     }  
  145.     exit();  
  146. }  
  147.   
  148. //系统负载过高报警  
  149. if (htmlspecialchars($_POST["menu"]) == "loadstat")  
  150. {  
  151.     $is_send_mail = "0";//是否发邮件,0为不发邮件  
  152.     $date = htmlspecialchars($_POST["date"]);  
  153.     $ip = htmlspecialchars($_POST["ip"]);  
  154.     list($load_last_1min$load_last_5min$load_last_15min) = split(",",  
  155.         htmlspecialchars($_POST["data"]));  
  156.     if ($load_last_15min >= 25)  
  157.     {  
  158.         if ($load_last_15min < 50)  
  159.         {  
  160.             $level = "轻微";  
  161.         }  
  162.         elseif ($load_last_15min < 100)  
  163.         {  
  164.             $level = "严重";  
  165.         }  
  166.         elseif ($load_last_15min < 500)  
  167.         {  
  168.             $level = "非常严重";  
  169.         }          
  170.         else  
  171.         {  
  172.             $level = "接近崩溃";  
  173.         }  
  174.         $subject = "[系统监控]_系统负载过高(" . $level . ")_" . $ip;  
  175.         $message = "服务器监控系统 ServMon V1.1/r/n";  
  176.         $message = $message . "-------------------------------------------------------/r/n";  
  177.         $message = $message . "报警服务器:" . $ip . "/r/n";  
  178.         $message = $message . "-------------------------------------------------------/r/n";  
  179.         $message = $message . "报警时间:" . $date . "/r/n";  
  180.         $message = $message . "-------------------------------------------------------/r/n";  
  181.         $message = $message . "报警内容:/r/n";  
  182.         $message = $message . "●系统负载过高,级别:" . $level . " (25~50轻微、50~100严重、100~500非常严重、>500接近崩溃)/r/n";  
  183.         $message = $message . "●最近 1分钟系统负载:" . $load_last_1min . "/r/n";  
  184.         $message = $message . "●最近 5分钟系统负载:" . $load_last_5min . "/r/n";  
  185.         $message = $message . "●最近15分钟系统负载:" . $load_last_15min . "/r/n";  
  186.         $headers = 'From: ServMon <servmon@sina.com>' . "/r/n" .  
  187.             'Reply-To: ServMon <servmon@sina.com>' . "/r/n" . 'X-Mailer: PHP/' . phpversion();  
  188.         $is_send_mail = "1";//是否发邮件,1为发送邮件  
  189.     }  
  190.     if ($is_send_mail == "1")  
  191.     {  
  192.         if (mail($email$subject$message$headers))  
  193.         {  
  194.             echo "已成功发送报警邮件!/n";  
  195.         }  
  196.         else  
  197.         {  
  198.             echo "发送报警邮件失败!/n";  
  199.         }  
  200.     }  
  201.     else  
  202.     {  
  203.         echo "系统负载不高,无须发送报警邮件!/n";  
  204.     }  
  205.     exit();  
  206. }  
  207. ?>  

 

 

 

 

 我管理服务器太多了,不可能每时每刻都登录到上面查看服务器状况,于是写了一个“服务器监控系统 ServMon V1.0”。其原理是用shell脚本定时抓取被监控服务器上信息,再用curl POST到监控机的PHP接口程序上,由PHP接口程序对信息进行分析,如果存在异常,则发送报警邮件给管理员。

  下午,ServMon V1.0 已经在sina播客服务器上部署,以下为ServMon的删节版内容,只监控磁盘分区使用率和Swap交换空间两项:

  点击在新窗口中浏览此图片

  1、被监控端服务器的shell脚本(Linux)
  (1)、发送磁盘分区使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本

引用
/usr/local/servmon/bin/diskstat_send
#!/bin/sh
LANG=zh_cn
disk=$(/bin/df -kP | grep / | awk -F ' ' ' {print $6":"$5}' | awk -F '%' ' {print $1}' | tr -s '/n' ';')
today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '/n' ';')
/usr/bin/curl -d menu=diskstat -d password=$2 -d date=$today -d ip=$ip -d data=$disk $1


  磁盘分区使用率监控报警邮件示例图:
  点击在新窗口中浏览此图片


  (2)、发送Swap交换空间使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本
  /usr/local/servmon/bin/swapstat_send

引用
#!/bin/sh
LANG=zh_cn
data=$(/usr/bin/free -m | grep Swap | awk '{print $2":"$3":"$4}')
today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '/n' ';')
/usr/bin/curl -d menu=swapstat -d password=$2 -d date=$today -d ip=$ip -d data=$data $1


  Swap交换空间使用率监控报警邮件示例图:
  点击在新窗口中浏览此图片

  (3)、计划任务:每30分钟将磁盘分区使用率发送给监控端接口,每10分钟将Swap交换空间使用率发送给监控端接口。
  /etc/cron.d/servmon

引用
0-30/30 * * * * root /bin/sh /usr/local/servmon/bin/diskstat_send http://192.168.0.28/servmon/interface.php yourpassword
0-50/10 * * * * root /bin/sh /usr/local/servmon/bin/swapstat_send http://192.168.0.28/servmon/interface.php yourpassword





  2、监控端服务器配置(Linux)
  (1)、启动sendmail
  /usr/sbin/sendmail -bd -q30m
  -b:指定Sendmail在后台运行,并且监听端口25的请求。
  -d:指定Sendmail以Daemon方式运行(守护进程)。
  -q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。其中的30m表示保留30分钟。

  (2)、修改php.ini的[mail function]部分为以下内容,然后重启Apache,使PHP能够使用mail()函数发送电子邮件

引用
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i



  (4)、在MySQL上创建一个数据库servmon,然后在该数据库中执行以下SQL语句创建表:

引用
CREATE TABLE `tb_diskstat` (
 `ip` varchar(128) NOT NULL default '',
 `date` int(10) NOT NULL default '0',
 UNIQUE KEY `ip` (`ip`)
) TYPE=MyISAM;


  备注:这张表是PHP接口程序用来记录发送磁盘分区报警邮件的时间,避免在一段时间内重复发送大量报警邮件的,其实完全可以用Session、文本文件来代替它。这里之所以用MySQL数据库,是因为PHP接口中还将增加一些需要记录信息到数据库的监控模块,所以就统一用数据库了。)

  (3)、PHP接口程序
  http://192.168.0.28/servmon/interface.php

  1. <?php   
  2. /**  
  3. *********************************************************************  
  4. * Copyright (c) 2007, 回忆未来[张宴]  
  5. * All rights reserved.  
  6. *  
  7. * 文件名称: interface.php  
  8. * 摘    要: 服务器监控系统ServMon接口程序  
  9. * 描    述:  
  10. * 作    者: 张宴  新浪UC:103500  博客:blog.s135.com  
  11. * 版    本: 1.0  
  12. * 时    间: 2007-08-03  
  13. *********************************************************************  
  14. */  
  15.   
  16. //------------------配置信息------------------   
  17. $password = "yourpassword";//设置数据传输验证密码   
  18. $mysql_server = "127.0.0.1:3306";//MySQL服务器地址及端口,例如localhost:3306   
  19. $mysql_db = "servmon";//MySQL数据库名   
  20. $mysql_username = "root";//MySQL帐号   
  21. $mysql_password = "";//MySQL密码   
  22. $disk_max = "90";//磁盘分区使用百分比超过此值,则报警。默认为90%   
  23. $disk_sendmail_interval = "43200";//如果同一台服务器连续报警,设置每隔多少秒发送一次报警邮件。默认为43200秒,即12小时。   
  24. $swap_max = "50";//Swap交换空间使用百分比超过此值,则报警。默认为50%   
  25. $email = "servmon@sina.com";//管理员邮箱   
  26. //--------------------------------------------   
  27.   
  28. //密码验证   
  29. if (htmlspecialchars($_POST["password"]) != $password)   
  30. {   
  31.     echo "数据传输验证密码错误!/n";   
  32.     exit();   
  33. }   
  34.   
  35. //磁盘分区报警(分区使用率超过90%后会发邮件报警)   
  36. if (htmlspecialchars($_POST["menu"]) == "diskstat")   
  37. {   
  38.     $is_send_mail = "0";//是否发邮件,0为不发邮件   
  39.     $date = htmlspecialchars($_POST["date"]);   
  40.     $ip = htmlspecialchars($_POST["ip"]);   
  41.     $data = htmlspecialchars($_POST["data"]);   
  42.     $subject = "[系统监控]_磁盘分区空间不足_" . $ip;   
  43.     $message = "服务器监控系统 ServMon V1.0/r/n";   
  44.     $message = $message . "-------------------------------------------------------/r/n";   
  45.     $message = $message . "报警服务器:" . $ip . "/r/n";   
  46.     $message = $message . "-------------------------------------------------------/r/n";   
  47.     $message = $message . "报警时间:" . $date . "/r/n";   
  48.     $message = $message . "-------------------------------------------------------/r/n";   
  49.     $message = $message . "报警内容:/r/n";   
  50.     $headers = 'From: ServMon <servmon@sina.com>' . "/r/n" .   
  51.         'Reply-To: ServMon <servmon@sina.com>' . "/r/n" . 'X-Mailer: PHP/' . phpversion();   
  52.     $arr1 = explode(";"$data);   
  53.     foreach ($arr1 as $key1 => $value1)   
  54.     {   
  55.         $arr2 = explode(":"$value1);   
  56.         if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)   
  57.         {   
  58.             $message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足(空间使用率达到" . $arr2[1] . "%)/r/n";   
  59.             $is_send_mail = "1";//是否发邮件,1为发送邮件   
  60.         }   
  61.     }   
  62.     if ($is_send_mail == "1")   
  63.     {   
  64.         $connect = mysql_connect($mysql_server$mysql_username$mysql_password);   
  65.         $select = mysql_select_db($mysql_db$connect);   
  66.         $select_result = mysql_query("SELECT date FROM tb_diskstat WHERE ip='" . $ip .   
  67.             "' LIMIT 1");   
  68.         $rs = mysql_fetch_array($select_result);   
  69.         $interval = date("U") - $rs["date"];   
  70.         if ($interval >= $disk_sendmail_interval)   
  71.         {   
  72.             if (mail($email$subject$message$headers))   
  73.             {   
  74.                 echo "已成功发送报警邮件!/n";   
  75.             }   
  76.             else  
  77.             {   
  78.                 echo "发送报警邮件失败!/n";   
  79.             }   
  80.             $insert_result = mysql_query("REPLACE INTO tb_diskstat (ip, date) VALUES ('" . $ip .   
  81.                 "', '" . date("U") . "');");   
  82.         }   
  83.         else  
  84.         {   
  85.             if ($disk_sendmail_interval >= 3600)   
  86.             {   
  87.                 $disk_sendmail_interval_text = $disk_sendmail_interval / 3600 . "小时";   
  88.             }   
  89.             else  
  90.             {   
  91.                 $disk_sendmail_interval_text = $disk_sendmail_interval . "秒";   
  92.             }   
  93.             echo "已发送过报警邮件," . $disk_sendmail_interval_text . "内不再重复发送!/n";   
  94.         }   
  95.   
  96.     }   
  97.     else  
  98.     {   
  99.         echo "磁盘分区空间足够,无须发送报警邮件!/n";   
  100.     }   
  101.     exit();   
  102. }   
  103.   
  104. //Swap交换空间报警(Swap交换空间使用率超过60%后会发邮件报警)   
  105. if (htmlspecialchars($_POST["menu"]) == "swapstat")   
  106. {   
  107.     $is_send_mail = "0";//是否发邮件,0为不发邮件   
  108.     $date = htmlspecialchars($_POST["date"]);   
  109.     $ip = htmlspecialchars($_POST["ip"]);   
  110.     list($total$used$free) = split(":", htmlspecialchars($_POST["data"]));   
  111.     $percentage = round($used / $total * 100, 0);   
  112.     $subject = "[系统监控]_Swap交换空间使用率高达" . $percentage . "%_" . $ip;   
  113.     $message = "服务器监控系统 ServMon V1.0/r/n";   
  114.     $message = $message . "-------------------------------------------------------/r/n";   
  115.     $message = $message . "报警服务器:" . $ip . "/r/n";   
  116.     $message = $message . "-------------------------------------------------------/r/n";   
  117.     $message = $message . "报警时间:" . $date . "/r/n";   
  118.     $message = $message . "-------------------------------------------------------/r/n";   
  119.     $message = $message . "报警内容:/r/n";   
  120.     $headers = 'From: ServMon <servmon@sina.com>' . "/r/n" .   
  121.         'Reply-To: ServMon <servmon@sina.com>' . "/r/n" . 'X-Mailer: PHP/' . phpversion();   
  122.     $arr1 = explode(";"$data);   
  123.     foreach ($arr1 as $key1 => $value1)   
  124.     {   
  125.         $arr2 = explode(":"$value1);   
  126.         if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)   
  127.         {   
  128.             $message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足(空间使用率达到" . $arr2[1] . "%)/r/n";   
  129.             $is_send_mail = "1";//是否发邮件,1为发送邮件   
  130.         }   
  131.     }   
  132.     if ($percentage >= $swap_max)   
  133.     {   
  134.         $message = $message . "●Swap交换空间使用率高达" . $percentage . "%,若继续增加到100%可能会导致服务器死机。/r/n";   
  135.         $message = $message . "●Swap交换空间总量:" . $total . " MB/r/n";   
  136.         $message = $message . "●Swap交换空间使用:" . $used . " MB/r/n";   
  137.         $message = $message . "●Swap交换空间剩余:" . $free . " MB/r/n";   
  138.         $is_send_mail = "1";//是否发邮件,1为发送邮件   
  139.     }   
  140.     if ($is_send_mail == "1")   
  141.     {   
  142.         if (mail($email$subject$message$headers))   
  143.         {   
  144.             echo "已成功发送报警邮件!/n";   
  145.         }   
  146.         else  
  147.         {   
  148.             echo "发送报警邮件失败!/n";   
  149.         }   
  150.     }   
  151.     else  
  152.     {   
  153.         echo "Swap交换空间使用率不高,无须发送报警邮件!/n";   
  154.     }   
  155.     exit();   
  156. }   
  157. ?>  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值