该脚本用来批量探测大量需要探测的主机是否存活,使用的是nmap探测主机端口判断,至于用哪个端口,你得根据你的业务判断。为什么不用ping呢,因为ping不靠谱,网络稍微有点问题,就发宕机邮件,一天好几百封邮件。
假想环境:比如一个公司,有部分设备压力较大或因为老化问题,会频繁宕机。这时候就需要定期检测并上报设备健康状况。我们拿一个CDN公司做实例,假如后台Cache设备都使用的是ATS给用户服务,开放的80端口,我们就可以计划任务定期探测80端口确认是否存活。
一、准备工作
安装nmap命令及Sendmail,创建相关目录及文件;
nmapyum install -y nmap
wget/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar –zxvf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
cp sendEmail /usr/local/bin
mkdir -p/usr/local/sync/ipdir存放nmap生成的文件 touch/usr/local/sync/ipdir/ip存放要探测的主机IP
二、目录结构[root@localhost ~]#cd /usr/local/sync/;ll drwxr-xr-x. 2 root root 4096 11月 18 10:30 ipdir
-rw-r--r--. 1 root root 509 11月 18 10:26 nmap.sh
[root@localhost sync]#cd ipdir/;ll-rw-r--r--. 1 root root 714 11月 18 10:28 ip 被探测设备IP
-rw-r--r--. 1 root root 0 11月 18 10:35 nmap_111.161.65.34.lognmap生成的文件
三、计划任务及脚本[root@localhost ~]#crontab -l */5 * * * * sh /usr/local/sync/nmap.sh &
#!/bin/bash
#count=`ps -ef |grep nmap |grep -v "grep" |wc -l`
action(){
#for line in `cat /usr/local/sync/ipdir/ip`
cat /usr/local/sync/ipdir/ip | while read line
do
nmap -PO $line -p80 > /usr/local/sync/ipdir/nmap_$line.log
if [ "`cat /usr/local/sync/ipdir/nmap_$line.log | grep 'Host seems down'`" != "" ];then
/usr/local/bin/sendEmail -f 12345678910@ -t 10987654321@ -s -u "Server downtime" -xu 12345678910 -xp zxcvzxcvzxcv -m "Server down, please handle ! \n Time : `date` \n IP : `echo $line`"
fi
done
}
if [[ $count -lt 0 ]];then
exit 0
else
action
fi
主要的几个参数的注释,详细请百度sendmail用法,不再赘述。12345678910@ 发邮件的邮箱 10987654321@ 收邮件的邮箱
发邮件的邮件服务器
12345678910 发邮件邮箱用户名 zxcvzxcvzxcv 发邮件邮箱密码