在我们的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