2010-09-11 80 views
5

有一个好友添加产品新版本的目录。在Linux上监视目录的程序

上市看起来像这样

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

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

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

  • 我们有一个已经存在的实用程序或Perl库吗?

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

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

  • 您认为这样做会有效吗?

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

+1

你为什么不能升级内核 - 现在是很老了,最新的稳定版本是现在2.6.34.5和2.6.35.4分别.... – t0mm13b 2010-09-11 16:28:05

+0

@ tommieb75:公司机=>不可能。 – Lazer 2010-09-11 16:29:47

+2

知道构建何时完成将是艰难的。也许'mail -s“构建完成了”Lazer“作为'make build'中的最后一步? – msw 2010-09-11 16:31:05

回答

3

检查不同ls输出将东西时被删除,或者在目录改名甚至发送消息。您可以改为查找比上次发送的消息更新的文件。

下面是在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: [email protected] 
To: [email protected] 
Subject: New files found 

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

[它在C shell脚本中的样子](http://stackoverflow.com/questions/3692137/whats-wrong-with-this-c-shell-script)? – Lazer 2010-09-11 19:50:39

1

难道它不是一个简单的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 
0

是,Perl中的环路描述会做的伎俩。

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

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

5

如果您打算使用perl,我确信优秀的File::ChangeNotify模块对您非常有帮助。如果可用,它可以使用inotify,但也可以使用各种其他平台提供的其他文件查看机制。此外,作为后备,它有自己的观察实施,可在每个平台上运行,但效率低于专业平台。

0

你可以使用dnotify它是inotify的前身,并应适用于您的内核。它仍然支持更新的内核。