Как узнать, когда файл добавляется в каталог? - PullRequest
4 голосов
/ 01 февраля 2011

На нашем сервере Linux у нас есть программа, работающая в фоновом режиме, которая создает файлы в определенной директории.Я хочу получить письмо при добавлении нового файла в этот каталог.

Я пытался использовать Java, но это оказалось сложным.Так что я ищу лучшую идею.Есть какая-нибудь программа, которая может сделать это или скрипт?

Ответы [ 3 ]

4 голосов
/ 01 февраля 2011

Хорошо, я пойду с overkill (есть такая вещь?) И предложу утилиты из пакета inotify-tools .

Более конкретно inotifywait tool:

# 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
2 голосов
/ 01 февраля 2011

Вы хотите inotify .Вы также можете захотеть superuser.com ; -)

1 голос
/ 01 февраля 2011

В этот ответ Я перечисляю три библиотеки Ruby, которые позволяют вам смотреть каталог на предмет изменений. Сценарий, использующий одну из этих библиотек и почтовую библиотеку (например, Pony ), будет довольно простым.

Используя мою библиотеку и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...