簡體   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