2010-09-11 76 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的前身,並應適用於您的內核。它仍然支持更新的內核。