2011-02-01 60 views
4

在我們的linux服務器中,我們有一個運行在後臺的程序,它在某個目錄下創建文件。我想在將新文件添加到該目錄時收到郵件。如何知道文件何時添加到目錄?

我嘗試使用Java,但那變得很複雜。所以我正在尋找一些更好的主意。有一些程序可以做到這一點或腳本?

回答

4

那麼,我會去矯枉過正(有這樣的事情嗎?),並建議從inotify-tools package實用程序。

更具體的inotifywait工具:它通過grep輸出

# inotifywait -m /tmp 
Setting up watches. 
Watches established. 
/tmp/ OPEN,ISDIR 
/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR 
. 
. 
. 

管,並將其發送到猛砸循環或東西。瞧!

編輯:

這裏有一個快速&骯髒的一行:

inotifywait -m /tmp 2>/dev/null | grep --line-buffered '/tmp/ CREATE' | while read; do echo update | mail -s "/tmp updated" [email protected]; done 
+0

好極了!我會嘗試的。嗯...我不能upvote呢,否則我會有:) – 2011-02-01 18:07:16

1

this answer我列出讓你看的更改一個目錄中有三個Ruby庫。使用其中一個庫和一個郵件庫(如Pony)的腳本將非常簡單。

使用my library和小馬的腳本可能是簡單的:

require 'directorywatcher' 
require 'pony' 

# Only watch every two minutes 
my_watcher = Dir::DirectoryWatcher.new('uploads', 120) 
my_watcher.on_add = Proc.new do |file_name,info| 
    Pony.mail(
    via:   :smtp, 
    via_options: { address: 'smtp.mydomain.com', domain:'mydomain.com' }, 
    from:  "Upload Notifier <[email protected]>", 
    to:   "[email protected]", 
    subject:  "New File Uploaded!", 
    body:  "A new file '#{file_name}' was just uploaded on #{info[:date]}" 
) 
end 
my_watcher.start_watching.join # Join the thread 
+0

+1謝謝!這可以留在後臺運行,還是應該通過cron使用它? – 2011-02-01 18:13:14

相關問題