Как осуществлять мониторинг изменений в папке linux (solaris)?

Доброго времени суток, очень надеюсь на вашу помощь, вопрос к знатокам linux (точнее solaris), есть ли возможность каким-либо образом (желательно, используя только стандартный функционал) мониторить изменения в папке, и изменения перенаправлять на внешний сервер (аля syslog)?

Ситуация следующая:
в папке хранятся много файлов (более 500) со случайными именами, изменения происходят примерно с 30ю из них все время. Хотелось бы получать от сервера что и в каких файлах изменилось (точнее добавилось, т.к. файлы - логи).

Изменить механизм логирования нельзя, программа уже написана за нас :)
Расшарить папку как smb ресурс тоже нельзя, есть только SCP или SSH.
Использовать "синхронизацию в SCP" тоже не подходит, т.к. он будет качать весь файл целиком каждый раз (а файлы есть размером много больше чем 1 Гб), "докачивать" изменения он не умеет.

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

Для Windows похожий "демон" уместился в 15 строк на C#, но есть сервера с linux и как на них подобное сделать не представляю:( Надеюсь на ваш совет, т.к. с linux работал мало.
  • Вопрос задан
  • 8245 просмотров
Пригласить эксперта
Ответы на вопрос 5
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Вообще-то для этих целей есть rsync, который синхронизирует ипересылает файлы и каталоги. Синхронизируются только изменения, а не все файлы. ru.wikipedia.org/wiki/Rsync
Ну также есть механизм inotify для слежения за файлами en.wikipedia.org/wiki/Inotify
Ответ написан
methodx
@methodx
DevOps Engineer
Можно использовать inotify, FAM или Gamin.
Также, для решения задачи подойдет supervisord.
Ответ написан
ptchol
@ptchol
Linux system administrator
В solaris 11+ есть file event notification. Возможно есть на его базе аналоги утилит inotifywatch \ inotifywait.
Впрочем если вы дружны с кодом, то можно и самому в пару сотен строк их реализовать (https://blogs.oracle.com/praks/entry/file_events_n...
Либо опять же очень тупой но в принципе рабочий вариант, stat'ом в цикле проверять изменения файлов :)
Ответ написан
3vi1_0n3
@3vi1_0n3
Раз уж упоминается linux, то в нем это можно сделать двумя очень короткими скриптами с использованием netcat:
1) Отправка:
#!/bin/bash
tail -f 1.log | nc 127.0.0.1 8080

Вариант отправки без netcat:
#!/bin/bash
tail -f 1.log >/dev/tcp/127.0.0.1/8080

2) Получение:
#!/bin/bash
nc -l 127.0.0.1 -p 8080 > 2.log

Первый скрипт запускаем, чтобы он работал в фоне, так:
nohup transmit.sh &
Второй скрипт для работы в фоне тоже так же.
По идее GNU-тый tail для соляриса есть, netcat вроде тоже. Но хотелось бы узнать версию Соляриса, если это именно он у вас используется, чтобы более нативно посмотреть. В Солярисе это может быть совсем по-другому.
Ответ написан
macik
@macik
incrontab и будет вам счастья.

Все просто до не могу. Я использую такое постоянно.
/home/camin/    IN_MOVED_TO     /python/cam_file.py $#
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы