繁体   English   中英

一个监控Linux目录的程序

[英]a program to monitor a directory on Linux

有一个伙伴添加产品的新版本的目录。

列表看起来像这样

$ ls path-to-dir/
01
02
03
04
$

列出的数字不是文件,而是包含构建的目录的名称。

我必须每次手动去检查是否有新的版本。 我正在寻找一种自动化方法,以便程序可以在path-to-dir/更新时向某些人(包括我)发送电子邮件。

  • 我们是否有一个已经存在的实用程序或Perl库来执行此操作?

    inotify.h做了类似的事情,但我的内核不支持它(2.6.9)。

我认为在Perl中可以有一个简单的方法。

  • 你认为这会奏效吗?

    继续在Perl中运行一个循环,它执行ls path-to-dir/ after,比如每5分钟一次,并将结果存储在一个数组中。 如果发现新结果与旧结果不同,则会使用邮件电子邮件发送电子邮件

如果您要使用perl,我确信优秀的File::ChangeNotify模块对您非常有帮助。 它可以使用inotify (如果可用),还可以使用不同平台提供的各种其他文件监视机制。 此外,作为后备,它有自己的观察实现,适用于每个平台,但效率低于专业平台。

即使在目录中删除或重命名某些内容,检查不同的ls输出也会发送消息。 您可以使用比上次发送的消息更新的mtime来查找文件。

这是bash中的一个示例,您可以每5分钟运行一次:

now=`date +%Y%m%d%H%M.%S`

if [ ! -f "/path/to/cache/file" ] || [ -n "`find /path/to/build/dir -type f -newer /path/to/cache/file`" ]
then
    touch /path/to/cache/file -t "$now"
    sendmail -t <<< "
To: aaa@bbb.ccc
To: xxx@yyy.zzz
Subject: New files found

Dear friend,
I have found a couple of new files.
"
fi

它不能是一个简单的shell脚本吗?

while :;do
        n = 'ls -al path-to-dir | wc -l'
        if n -gt old_n
    # your Mail code here; set old_n=n also
        fi
   sleep 5
done

是的,所描述的Perl中的循环可以解决问题。

您可以跟踪上次修改目录的时间; 如果它没有改变,那么就没有新的版本。 如果已更改,则可能已删除旧版本或添加了新版本。 您可能不希望在删除旧版本时发送警报; 添加新版本时发送电子邮件至关重要。

但是,我认为msw有正确的想法; 构建应该在完成复制到新目录时通知。 它应该是一个可以更改的脚本,以通知正确的人员列表 - 而不是makefile中的硬连线名称列表或您使用的任何其他构建控件系统。

你可以使用dnotify它是inotify的前身,应该可以在你的内核上使用。 它仍然受到更新内核的支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM