pingtest.sh

pingtest.sh

我使用 Ubuntu 16.04 和 Nginx 以及一些 WordPress 网站。有时我很长时间(>=1 个月)不访问某个网站,可能该网站已关闭。

我正在寻找一个小实用程序,如果我的 Nginx-WordPress 网站之一宕机(没有提及原因),它可以向我的 Gmail 帐户发送电子邮件。

迄今为止考虑的方法

1. 从头开始​​创建一个工具

  1. 为我的 SMTP 服务器创建整个非默认配置。
  2. 在托管提供商 DNS 管理工具中添加和配置 DNS 记录。
  3. 在每个域上添加每周 cron 任务curl -l -L并将其输出保存到文件中。
  4. 添加每周 cron 任务(例如一小时后),检查每个文件,如果状态代码不是 200,则给自己发送电子邮件。

这看起来很简单,但实际上相当复杂(尽管不一定复杂),而且也可能有点脆弱。一个专用的、公共的、维护的实用程序可能对我来说更好。

2. 第三方工具

我不想使用一些浮夸的第三方网络监控像 Nagios、Icinga、Zabbix、Shinken 等服务,就这个特定原因而言,它们似乎都有些过分了。

3.Postfix插件

我已经安装了Postfix配置,internet-site以便该工具可以使用 Postfix。我只使用 Postfix 默认值,我可以在其上添加一些默认配置internet-site,也许无需添加和配置 DNS 记录。

一个用于重新配置 Postfix 的交互式程序实用程序可能会减轻我的痛苦;我不必在 Ubuntu-Nginx-WordPress-Environment 安装脚本中填写大量 SMTP 配置数据。也许之后我只需要设置一些 DNS 记录,仅此而已。任何能够以这种或那种方式简化流程的方法对我来说也是一种选择。

4. 处理垃圾邮件过滤器

即使 Gmail 错误地将我的第一封电子邮件(或第一批电子邮件)移至垃圾邮件,我也可以将其放入白名单。


我的问题

有没有一个实用程序可以用来实现这种行为?

答案1

最好的选择是使用类似的服务正常运行机器人。免费套餐将覆盖不到 50 个站点,专业计划相当便宜。它将进行简单的 ping 检查,甚至 HTTP 状态代码检查

这样做的结果是您不会添加额外的故障点(您可以控制)。您不再需要维护和更新监控服务

答案2

你可以使用这样的东西;

> cat email_warning.sh 
#!/bin/bash

#
# email_warning.sh 
#

UP=true
[email protected]
[email protected]
MAX=5
URL="https://$(hostname)/"

function doMail {
    S="$1 $(date)"
    F=$(echo $S | perl -p0e 's/[\s\t ]+/_/g;s/^(.{122}).*$/$1/g')
    echo -e "Subject:$S\n\n$S" | sendmail -F $F -f $FROM $TO
}

function doUP {
    curl -s -m $MAX "$URL" > /dev/null
    R=$?;
    if [ "$R" == "0" -a "$UP" == false ] ; then
        UP=true
        doMail "recovered $URL"
    elif [ "$R" != "0" -a "$UP" == true ] ; then 
        UP=false
        doMail "over $MAX s for $URL"
    fi
}

while [ "" == "" ] ; do
    ping -c 2 8.8.8.8 >/dev/null 2>&1
    if [ "$?" == "0" ] ; then
        doUP
    fi
    sleep 60
done
  • 只需在 tmux/screen/nohup 中运行它(或使用 cron 等echo $UP > /dev/shm/email_warning.tmp
  • 如果您还需要有关网络和服务器问题的电子邮件,可以调整脚本来监视本地服务或远程服务。
  • 还可能需要检查其他故障模式(例如无法运行的数据库)的服务响应。
  • 只要您不在家庭网络上,您就不需要自己的功能正常的 SMTP 服务器(尽管 sendmail 是通过 postfix 安装的)。
  • doMail 功能旨在最适合 Gmail 转发到没有数据的手机。
  • 如果您有 Gmail 垃圾邮件过滤器,那么这将不是问题有效的防晒指数在您的 DNS 中,或者只需将电子邮件地址添加到您的联系人并添加非垃圾邮件过滤器。

答案3

尝试修改我在下面构建的脚本。我的示例包含 3 个众所周知的主机和 2 个不存在的主机。

pingtest.sh

HOSTLIST='www.google.com www.oracle.com www.facebook.com www.sdfafdsfdsf.com www.uieyafbmndhfjsbxcvn.com'

BAD_HOSTLIST=
for HOST in $HOSTLIST ; do
        echo $HOST
        ping -c 3 -w 5 $HOST || BAD_HOSTLIST="$BAD_HOSTLIST $HOST"
        echo =======================
done

if [ -n "$BAD_HOSTLIST" ] ; then
        echo ___________________________________________
        echo The following hosts failed the ping test:-
        echo $BAD_HOSTLIST | xargs -n 1
        echo $BAD_HOSTLIST | mailx -s 'Hosts that failed the ping test' [email protected]
fi

如果您需要快速设置邮件转发器,请尝试这篇关于使用 ssmtp 的简短而简单的文章:https://www.cyberciti.biz/tips/linux-use-gmail-as-a-smarthost.html

快速查看脚本的输出如下:

# ./pingtest.sh
www.google.com
PING www.google.com (216.58.200.100) 56(84) bytes of data.
64 bytes from www.google.com (216.58.200.100): icmp_seq=1 ttl=55 time=29.8 ms
64 bytes from www.google.com (216.58.200.100): icmp_seq=2 ttl=55 time=28.4 ms
64 bytes from www.google.com (216.58.200.100): icmp_seq=3 ttl=55 time=30.3 ms

--- www.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 28.483/29.577/30.365/0.810 ms
=======================
www.oracle.com
PING e870.dscx.akamaiedge.net (104.116.147.64) 56(84) bytes of data.
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=1 ttl=56 time=29.5 ms
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=2 ttl=56 time=28.3 ms
64 bytes from www.oracle.com (104.116.147.64): icmp_seq=3 ttl=56 time=27.8 ms

--- e870.dscx.akamaiedge.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 27.842/28.570/29.503/0.706 ms

=======================
www.facebook.com
PING star-mini.c10r.facebook.com (157.240.8.35) 56(84) bytes of data.
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=1 ttl=53 time=27.8 ms
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=2 ttl=53 time=79.4 ms
64 bytes from www.facebook.com (157.240.8.35): icmp_seq=3 ttl=53 time=79.0 ms

--- star-mini.c10r.facebook.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 27.887/62.130/79.467/24.215 ms
=======================
www.sdfafdsfdsf.com
ping: www.sdfafdsfdsf.com: Name or service not known
=======================
www.uieyafbmndhfjsbxcvn.com
ping: www.uieyafbmndhfjsbxcvn.com: Name or service not known
=======================
___________________________________________
The following hosts failed the ping test:-
www.sdfafdsfdsf.com
www.uieyafbmndhfjsbxcvn.com

答案4

如果您还没有使用电子邮件,您可以使用推子弹,这将使用 向您的手机发送推送通知curl。您需要将其安装在您的移动设备上。

然后简单地有一个小的 bash 脚本来卷曲你的网站,如果它没有响应,那么你可以像这样直接向你的手机发送推送通知:

curl -u $auth_token: https://api.pushbullet.com/v2/pushes -d type=note -d title="Alert" -d body="$MSG"

$auth_token注册后,您的 Pushbullet 身份验证令牌在哪里。

相关内容