用于远程计算机的Bash心跳脚本

时间:2014-06-11 16:50:08

标签: bash osx-mavericks

我正在寻找关于此脚本的批评或其他/更好的想法。我有多台远程机器通过ssh和rsync执行各种功能到数据中心的服务器。我虽然检查它们的一种方法是每个人触摸服务器上的文件。我有一个文件文件(check-ins.txt),其中列出了机器(触摸的文件)。此脚本读取文本文件,并将触摸文件的模式时间与当前时间进行比较,如果它超过x,或者不存在,请发送电子邮件给我。

siteDIR="some/path"

while read -r line; do
if [ -e $sitesDIR$line ] ; then
    echo "$line exists"
    time1="$(( $(date +%s) - $(stat -f%c $sitesDIR$line) ))"
    if [ $time1 -lt 3600 ] ; then
        echo "we're good"
    else
        echo "we're NOT good - over 1 hour old - send an email"
    fi
else
    echo "something is up with the config file- $line doesn't exist - send an email"
fi
done < check-ins.txt

我在bash上越来越好,但还不是职业选手。任何建设性的批评/或更好的想法将不胜感激。哎呀,我刚刚了解了&#34;来源&#34;和&#34; at&#34;。玩得开心....谢谢

1 个答案:

答案 0 :(得分:0)

不是一个糟糕的剧本。一些事情

由于您希望监控这些主机是否正常,因此您需要确保您的显示器有效。您提到远程主机使用ssh和rsync执行各种操作。因此,对于办理登机手续,您希望这些主机能够了解如何办理登机手续。使用ssh和rsync。那有意义吗?

因此,您希望一台显示器能够让您知道远程主机是否可以ssh到服务器

您希望第二台监视器能让您知道远程主机可以rsync到服务器

所以在这种情况下,你可以拥有第一个文件,也许命名为&#34; ssh.txt&#34;客户端使用ssh命令放置(如ssh hostname&#34; touch filename&#34;)

创建第二个文件,可能命名为&#34; rsync.txt&#34;,由客户端使用rsync命令放置在那里(在本地,触摸,而不是将其同步到服务器)

然后上面的显示器可以监控两个文件

我还没有在

之前使用过这种语法
time1="$(( $(date +%s) - $(stat -f%c $sitesDIR$line) ))"

所以我不知道它是否正确。

好的,接下来想,我会怎么做,也许会给你一些思考的食物。这可能是您正在生成的大量电子邮件。我猜你的脚本每小时运行一次?我会调整,以便它只发送一封电子邮件,也许两封电子邮件

我首先使用主机名创建我的签入文件,例如host1.ssh.txt,host1.rsync.txt)

第一封电子邮件:所有未签入的主机(不存在ssh.txt或rsync.txt文件)

第二封电子邮件:已签到但未在过去一小时内登记的所有主机

在第一封电子邮件中,使用check-ins.txt作为输入并执行&#34; ls&#34;在所有文件上。任何不存在的文件,将其添加到输出文件中,例如&#34;不存在.txt&#34;然后在第一封电子邮件中发送该文件的内容

然后我可能会对超过一小时的文件执行某种查找命令,然后将这些文件的列表放在第二个文件中,例如&#34; old-than-an-hour.txt&#34;。请记住,主机名已经在文件中,因此当您阅读电子邮件并看到类似

的内容时
host1.ssh.txt
host2.ssh.txt
host2.rsync.txt

等。 您可以告诉哪些主机和哪些方法失败了他们的显示器

只是一些想法!