在我們的linux服務器中,我們有一個運行在後臺的程序,它在某個目錄下創建文件。我想在將新文件添加到該目錄時收到郵件。如何知道文件何時添加到目錄?
我嘗試使用Java,但那變得很複雜。所以我正在尋找一些更好的主意。有一些程序可以做到這一點或腳本?
在我們的linux服務器中,我們有一個運行在後臺的程序,它在某個目錄下創建文件。我想在將新文件添加到該目錄時收到郵件。如何知道文件何時添加到目錄?
我嘗試使用Java,但那變得很複雜。所以我正在尋找一些更好的主意。有一些程序可以做到這一點或腳本?
那麼,我會去矯枉過正(有這樣的事情嗎?),並建議從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
你想要inotify。你也可能需要superuser.com ;-)
在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
+1謝謝!這可以留在後臺運行,還是應該通過cron使用它? – 2011-02-01 18:13:14
好極了!我會嘗試的。嗯...我不能upvote呢,否則我會有:) – 2011-02-01 18:07:16