在我们的linux服务器中,我们有一个在后台运行的程序,它在某个目录中创建文件。我想在将新文件添加到该目录时收到邮件。
我尝试使用Java,但这很复杂。所以我正在寻找一些更好的主意。是否有一些程序可以执行此操作或脚本?
答案 0 :(得分:4)
好吧,我会过度使用(有这样的事吗?)并建议inotify-tools package的实用程序。
更具体地说是inotifywait工具:
# inotifywait -m /tmp
Setting up watches.
Watches established.
/tmp/ OPEN,ISDIR
/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR
.
.
.
通过grep
管道输出并将其发送到Bash循环或其他东西。瞧!
编辑:
这是一个快速的&肮脏的单行:
inotifywait -m /tmp 2>/dev/null | grep --line-buffered '/tmp/ CREATE' | while read; do echo update | mail -s "/tmp updated" john@example.com; done
答案 1 :(得分:2)
你想要inotify。您也可能需要superuser.com; - )
答案 2 :(得分:1)
在this answer中,我列出了三个允许您查看目录以进行更改的Ruby库。使用其中一个库和一个邮件库(如Pony)的脚本会相当简单。
使用my library和Pony脚本可能很简单:
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 <noreply@mydomain.com>",
to: "admin@mydomain.com",
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