首页 » 系统管理 » 正文

连接断开发送邮件的脚本

这个脚本会不断的ping一台主机,如果连续某些次数ping不通,则发送邮件给管理员。

下面是脚本代码,使用前需要对邮件参数进行设置,下面代码中隐藏了smtp密码,请到163申请新的账户,并且申请客户端密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

if [[ $# < 3 ]]; then
  echo "Example: $0 smtp.163.com 1 5"
  exit
fi

host=$1
duration=$2
count=$3

con_fails=0
fail=0
total=0

smtpserver=smtp.163.com
smtpport=25
user=13436881186@163.com
password=########
fromemail=13436881186@163.com
toemail=33493248@qq.com

while true; do
  echo -e "\r                                                                                                                       \c"
  echo -e "\rTotal Fails:\033[36m $fail \033[0m Total Pings:\033[36m $total \033[0m Contineous Fails:\033[36m $con_fails \033[0m\c"

  ((total++))

  ping -c 1 $host 2> /dev/null | grep "64 bytes from" > /dev/null

  if [[ $? = "1" ]]; then
    ((con_fails++))
    ((fail++))

    if [[ $con_fails = "$count" ]]; then
      echo -e "\n\nFail to connect to host $host at `date`."
      echo "Sending email to $toemail..."
      python ./sendmail.py -n $smtpserver -p $smtpport --user $user --passwd $password -f $fromemail -t $toemail -s "不能连接主机$host at `date`" -c "链接主机失败:$host at `date`"
      exit
    fi
  else
    con_fails=0
  fi

  sleep ${duration}s    
done

这个脚本以来一个python脚本,所以,你需要提前安装python,并且下载下面的python脚本后解压,放在同一个目录下sendmail.py

TODO

ping脚本考虑使用telnet 和 nc来实现, 因为ping在很多线上服务器都是关闭的。