一个监控Linux目录的程序

Laz*_*zer 5 c c++ unix perl

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

列表看起来像这样

$ ls path-to-dir/
01
02
03
04
$
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

  • 你认为这会奏效吗?

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

raf*_*afl 5

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


Mar*_*tin 3

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
Run Code Online (Sandbox Code Playgroud)