2011-02-01 72 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

相关问题