我有 5 台主机,如果其中任何一台宕机,我需要 ping 一下,通过电子邮件通知我,可以吗?每 20 分钟检查一次。有人能帮帮我吗?提前谢谢了...
我已经使用过这个脚本。我需要做任何更改才能获得预期的结果吗?
请提出任何意见。
#!/bin/bash
for i in $( cat $HOME/iplist.txt )
do
ping -q -c2 $i > /dev/null
if [ $? -eq 0 ]
then
echo $i "Pingable"
else
echo $i "Not Pingable"
fi
done
答案1
您的脚本看起来不错。您应该添加exit 0
/ exit 1
,表示失败 / 成功。更多信息请见下文。
每 20 分钟检查一次
如果脚本需要始终运行(每 20 分钟在后台运行一次),则应使用cron
系统上已提供的。
就像这样,如果脚本返回 1(FAILURE),则脚本的所有输出都将邮寄给 root。但是默认情况下,root 邮件只会发送到某个文件夹。您需要安装和配置邮件守护程序以将 root 邮件转发到您的个人邮件地址。如何做到这一点,例如这里解释:https://superuser.com/questions/306163/what-is-the-you-have-new-mail-message-in-linux-unix
或者在这里: 转发所有电子邮件的简便方法
编辑:
好的,这里有一些可以完成任务的命令。
1.) 首先,您需要一个脚本版本,该版本在失败时退出 1。类似这样的代码应该可以做到:
#!/bin/bash
ALL_HOSTS_AVAILABLE=true
for i in $( cat $HOME/iplist.txt )
do
ping -q -c2 $i > /dev/null
if [ $? -eq 0 ]
then
echo $i "Pingable"
else
echo $i "Not Pingable"
ALL_HOSTS_AVAILABLE=false
fi
done
if [ "$ALL_HOSTS_AVAILABLE" = false ] ; then
echo 'Some hosts were not available!'
exit 1
fi
exit 0
2.) 现在确保您已为您的用户设置了 sudo 权限(您不想直接以 root 身份执行操作)。如果没有,请按照本手册操作: 如何将用户添加到“sudo”组? 也许你首先需要安装 sudo 包
su root
apt-get install sudo
3.) 将脚本复制到所有用户可见的某个文件夹,并将其交给 root。例如:
sudo cp myScript /usr/local/bin
sudo chown root /usr/local/bin/myScript
sudo chgrp root /usr/local/bin/myScript
4.) 设置一个 cronjob 来运行你的脚本
# write out current crontab
crontab -l > mycron
# echo new cron into cron file */20 means each 20 minutes
# Check https://de.wikipedia.org/wiki/Cron for format
echo "*/20 * * * * /usr/local/bin/myScript" >> mycron
# install new cron file
sudo crontab mycron
rm mycron
5.) 安装一些 MTA,这样你就可以使用电子邮件通知了。看起来最简单的一个是nullmailer
sudo apt-get install nullmailer
nullmailer
.. 我不知道详细信息,只需通过谷歌寻求帮助,以正确的方式进行设置。