Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于远程计算机的Bash心跳脚本_Bash_Osx Mavericks - Fatal编程技术网

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

用于远程计算机的Bash心跳脚本,bash,osx-mavericks,Bash,Osx Mavericks,我正在寻找关于这个剧本的评论或其他/更好的想法。我有多台远程计算机,它们通过ssh和rsync执行数据中心服务器的各种功能。我认为检查它们的一种方法是让每个人都接触服务器上的一个文件。我有一个文本文件(checkins.txt),其中列出了机器(触摸过的文件)。此脚本读取文本文件,并将mod time与触摸文件上的当前时间进行比较,如果超过x,或不存在,请向我发送电子邮件 siteDIR="some/path" while read -r line; do if [ -e $sitesDIR$

我正在寻找关于这个剧本的评论或其他/更好的想法。我有多台远程计算机,它们通过ssh和rsync执行数据中心服务器的各种功能。我认为检查它们的一种方法是让每个人都接触服务器上的一个文件。我有一个文本文件(checkins.txt),其中列出了机器(触摸过的文件)。此脚本读取文本文件,并将mod time与触摸文件上的当前时间进行比较,如果超过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
siteDIR=“some/path”
而read-r行;做
如果[-e$sitesDIR$line];然后
回显“$行存在”
time1=“$($(日期+%s)-$(stat-f%c$sitesDIR$line))”
如果[$time1-lt 3600];然后
回声“我们很好”
其他的
echo“我们不好-超过1小时-发送电子邮件”
fi
其他的
echo“配置文件有问题-$line不存在-发送电子邮件”
fi
完成

我越来越擅长bash,但还不是专业选手。任何建设性的批评/或更好的想法都将不胜感激。见鬼,我刚学会了“源”和“在”。玩得开心。。。。谢谢

剧本不错。几件事

由于您希望监视这些主机是否正常,因此需要确保监视器有效。您提到远程主机使用ssh和rsync做各种事情。因此,对于签入,您希望这些主机了解如何使用ssh和rsync“签入”。这有意义吗

因此,您希望有一个监视器能够让您知道远程主机是否可以通过ssh连接到服务器

您可能希望另一个监视器工作,让您知道远程主机可以与服务器进行rsync

因此,在本例中,您可以使用ssh命令(如ssh hostname“touch filename”)将第一个文件(可能名为“ssh.txt”)放在那里

创建第二个文件,可能名为“rsync.txt”,由客户端使用rsync命令放在那里(在本地,触摸一下,然后将其发送到服务器)

然后,上面的监视器可以监视这两个文件

我以前从未使用过这种语法

time1="$(( $(date +%s) - $(stat -f%c $sitesDIR$line) ))"
所以我不知道这是否正确

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

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

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

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

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

然后我可能会对超过一小时的文件执行某种查找命令,然后将这些文件的列表放入第二个文件中,如“older-than-hour.txt”。记住主机名已经在文件中,所以当您阅读电子邮件并看到类似的内容时

host1.ssh.txt
host2.ssh.txt
host2.rsync.txt
等等。。 您可以告诉哪些主机和哪些方法使其监视器发生故障


只是一些想法

哦,另一个想法是研究一些监控工具,比如Big Brother(旧的、免费的,仍然有效!实际上商业版比免费版有更多的问题!)在你的第一段中,我使用ssh做到了这一点……好人:)希望其余的想法都能在你的第一段中引起思考,我使用ssh就可以做到这一点。。。。ssh$user@$peer-touch/myDirectory/check-ins/sites/$cust_-name,它创建了我要检查时间的文件。如果ssh正常工作,我将假定rsync正常工作,因为我使用ssh进行rsync。语法是正确的(假设它是正确的,如果它工作的话!)。如果他们定期登记,我不想知道,因为电子邮件会很多。谢谢你的意见!顺便说一句,我使用Nagios监控所有内部服务器。由于远程的问题有点超出了我们的控制范围(没有公共ip),这可能会更加困难,不是吗?对于需要解决的具体问题也是如此。询问代码审查、批评、建议等。有一个单独的网站:@AndrewMedico-我不知道“代码审查”存在,现在我知道了-谢谢这个问题属于codereview.stackexchange.com