持续监控网络服务器(HTTP)并使用 min 下载新添加的文件的最佳方法是什么?延迟(最好延迟 < 1 分钟)?
答案1
监控
首先,为了监控我建议您使用纳吉奥斯,核心源码是免费的,但是如果你需要GUI,你应该付费,但是花那么多钱是值得的。
Collectd(Collection Daemon)也是一个免费的监控工具,您可以yum
在 RHEL 衍生产品或apt-get
基于 Debian 的衍生产品上下载使用。你可以阅读这张纸如果你想使用 Collectd。
任务每 x < 1 分钟运行一次
对于问题的第二部分,每次 x 一次执行一项工作,其中 x 定期少于一分钟,正如您所知,您不能使用 Cronjobs,因为您可以使用以下解释的一些技巧吉尔斯 在这个问题中做你想做的事。
最好有一个满足您需要的脚本,并永远运行它,甚至在启动时运行它(如果需要)。您可以使用如下所示的简单语法:
while true; do yourJob; sleep someTime; done
或者,您甚至可以根据需要使用一些更复杂的脚本。
也可以使用watch
命令。例如:
watch -n1 command
它会运行你的command
每一秒,直到永远。
watch
正如您可能已经猜到的那样,如果您只需要每隔 x 次运行一个简单的脚本(少于一分钟)而不是复杂的脚本,那么您也可以运行 shell 脚本。
这是你的选择。
答案2
这取决于几个因素。
如果您可以控制 Web 服务器,最简单的方法是安装一个(RESTful?)服务,提供自上次检查或下载以来更改的文件数量。这最大限度地减少了客户端和服务器上的数据传输和负载。如果可以直接跟踪服务器上文件的上传/修改,例如在上传脚本中而不是依赖于文件系统,那就更是如此。
如果是后者,我会研究一些文件监控解决方案,例如famd
.
如果您无法控制服务器,则必须先进行修改才能下载它们。最简单的事情是使用一些网络镜像诸如 w3mir 之类的实用程序,因为它们已经负责检查/提供 ETag 和 Last-Modified / If-Modified-Since 标头。这意味着您必须发出更少的调用,因此能够更频繁地运行该实用程序。
至于如何要运行该实用程序,取决于它运行的位置。您可以在 Unix 机器上使用 cron 作业,或者只是循环运行它。
但是,如果您选择前者,我们建议您安装某种信号量,以防止镜像进程在前一个实例终止之前启动。它可以很简单,只需创建一个锁定文件:
if [ -r /tmp/mirror.lock ]; then
echo "lock file found" | logger -t webmirror
exit 0
fi
touch /tmp/mirror.lock
...whatever...
rm /tmp/mirror.lock
但是您还必须收到catch
任何可能终止脚本的信号,否则在出现临时错误的情况下,锁定文件可能会保留在那里,并阻止所有其他实例运行,即使在错误解决后也是如此。
或者,您可以验证锁定文件是否不早于某个合理的数量,如果是,则将其删除,或者验证找到了多少个脚本实例ps
(通常是当前的一个;如果更多,则当前的实例最好abort),并且完全不使用锁定文件。
答案3
您可以curl
在 cron 作业中执行一个简单的命令,但我建议您开始使用具有 Web 监视功能的监视解决方案。其中有很多是免费的,只需谷歌“开源网络监控解决方案”,你就会得到很多!