利用shell监控服务器状态并且EMAIL获取报警


其实之前博客中也有说到过,现在又老调重启了~因为我把阿里云的监控全部删除了.要脱坑就全部一起脱不想留下任何有关联的东西!不多说了~我们开始来折腾吧~

首先我们来配置MAIL部分,MAIL部分我们只用到发送所以就装个sendmail就好了

sudo apt-get install sendmail  
sudo apt-get install sendmail-cf
sudo apt-get install mailutils
下面几个包是可选的:
squirrelmail //提供webmail
spamassassin //提供邮件过滤
mailman //提供邮件列表支持
dovecot // 提供IMAP和POP接收邮件服务器守护进程
注意:
使用带附件的功能,则还需要安装sharutils,
安装命令:
sudo apt-get install sharutils;(yum install sharutils )

终端输入命令:

ps aux |grep sendmail

出现这个代表已经安装成功了!接下来就设置配置

二、配置
sendmail 默认只会为本机用户发送邮件,只有把它扩展到整个Internet,才会成为真正的邮件服务器。
打开sendmail的配置宏文件:/etc/mail/sendmail.mc
 vi  /etc/mail/sendmail.mc
找到如下行:
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
修改Addr=0.0.0.0 ,表明可以连接到任何服务器。
生成新的配置文件:
cd /etc/mail  
mv sendmail.cf sendmail.cf~      //做一个备份  
m4 sendmail.mc > sendmail.cf   //>的左右有空格,提示错误没有安装sendmail-cf 
三、测试发送邮件
测试例子:
echo "content:e9china server normal" | mail -s "title:Server connection" notice@e9china.net
说明文档:常用发送邮件方式如下
1.如何写一般的邮件: mail test@126.com Cc 编辑抄送对象,Subject:邮件主题,输入回车,邮件正文后,按Ctrl-D结束
2.快速发送方式: echo “邮件正文” | mail -s 邮件主题 test@126.com
3.以文件内容作为邮件正文来发送: mail -s test test@126.com < test.txt
4.发送带附件的邮件: uuencode 附件名称 附件显示名称 | mail -s 邮件主题 发送地址
例如: uuencode test.txt test.txt | mail -s Test test@126.com
第一次执行可能收信比较慢,可以多执行几次等收到信以后把发件人添加到白名单.下次收信基本都是1分钟之内可以做到!需要秒收的朋友那就得自己配置stmp了!
如果执行shell的时候出现: You have new mail in /var/mail/root

直接删除目录即可

rm -rf /var/mail/root

这样邮件发送配置好了.然后我们来配置shell了

首先我们建立2个php文件,放置到url可以访问到目录:

nginx.php文件

vi nginx.php
<?php
echo "200_OK";
?>

mysql.php文件

vi mysql.php
<?php
$link = mysql_connect('localhost', 'root', '123456');
if (!$link) {
    die('Connect error');
}
echo 'Connected successfully';
mysql_close($link);
?> 

建立shell监控文件

check_p+m.sh

#!/bin/bash
wget http://192.168.1.1/nginx.php  --spider
c_monitor=$?
if [ $c_monitor = "1" ] || [ $c_monitor = "4" ] || [ $c_monitor = "8" ] || [ $c_monitor -ne "0" ]; then
echo "# Error no 200 status, time: " $(date +"%y-%m-%d %H:%M:%S") "e9china.net(192.168.1.1) WEB IS DOWN test:http://192.168.1.1/nginx.php" | mail -s "e9china.net: Website is offline." notice@e9china.net
/etc/init.d/php-fpm restart
fi

############################  check the MySQL ###################################

/etc/init.d/mysql  status &> /dev/null
if [ $? -ne 0 ] ; then
    echo "At time: 'data': mysql service is down. " >> /var/log/messages
    echo "# MySQL Error status, time: " $(date +"%y-%m-%d %H:%M:%S") "e9china.net(192.168.1.1) MYSQL IS DOWN test:http://192.168.1.1/mysql.php" | mail -s "e9china.net: MySQL is offline." notice@e9china.net 
    /usr/bin/killall mysql   
    /etc/init.d/mysql  restart
fi

这里我们标题和内容都加入了服务器名称和url,目的是当你收到报警邮件的是可以点击url看一下状态!不用急急忙忙的上服务器~这个设置人不在电脑旁的时候非常有用!

然后我们给以check_p+m.sh可以root允许的权限

chmod 777 check_p+m.sh

我们现在需要他每1分钟检查一下,那么就用到我们的老朋友crontab了

* */1 * * * bash /root/check_p+m.sh

这样就完成了.完成以后记得要测试,看会不会生效.如果你使用的是lnmp那么命令如下:

/etc/init.d/php-fpm stop
/etc/init.d/mysql stop

执行完毕等待一分钟,看看会不会自动启动和接受到邮件.好了教程就到这里结束了

声明:Sandy'Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 利用shell监控服务器状态并且EMAIL获取报警


一流的吃貨,二流的廚藝,三流的技術,下流的人品