программа для мониторинга каталога в Linux - PullRequest
5 голосов
/ 11 сентября 2010

Существует каталог, в котором собеседник добавляет новые сборки продукта.

Листинг выглядит следующим образом

$ ls path-to-dir/
01
02
03
04
$

, где перечисленные номера являются не файлами, а именами каталогов, содержащихbuilds.

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

  • Есть ли у нас уже существующая утилита или библиотека Perl, которая делает это?

    inotify.h делает что-то подобное, но это не поддерживается в моем ядре (2.6.9).

Я думаю, что в Perl может быть легкий путь.

  • Как вы думаете, это будет работать?

    Сохранитьзапуск цикла в Perl, который выполняет ls path-to-dir/ после, скажем, каждые 5 минут и сохраняет результаты в массиве.Если он обнаруживает, что новые результаты отличаются от старых, он отправляет электронное письмо с использованием Mail или Email .

Ответы [ 5 ]

5 голосов
/ 11 сентября 2010

Если вы собираетесь использовать Perl, я уверен, что превосходный модуль File::ChangeNotify будет очень полезен для вас.Он может использовать inotify, если доступно, но также и все виды других механизмов просмотра файлов, предоставляемых различными платформами.Кроме того, в качестве запасного варианта он имеет собственную реализацию для просмотра, которая работает на любой платформе, но менее эффективна, чем специализированная.

3 голосов
/ 11 сентября 2010

Проверка различных выходных данных ls отправит сообщение, даже если что-то будет удалено или переименовано в каталоге. Вместо этого вы можете искать файлы с mtime новее, чем последнее отправленное сообщение.

Вот пример в bash, вы можете запускать его каждые 5 минут:

now=`date +%Y%m%d%H%M.%S`

if [ ! -f "/path/to/cache/file" ] || [ -n "`find /path/to/build/dir -type f -newer /path/to/cache/file`" ]
then
    touch /path/to/cache/file -t "$now"
    sendmail -t <<< "
To: aaa@bbb.ccc
To: xxx@yyy.zzz
Subject: New files found

Dear friend,
I have found a couple of new files.
"
fi
1 голос
/ 11 сентября 2010

Не может ли это быть простой сценарий оболочки?

while :;do
        n = 'ls -al path-to-dir | wc -l'
        if n -gt old_n
    # your Mail code here; set old_n=n also
        fi
   sleep 5
done
0 голосов
/ 11 сентября 2010

вы можете использовать dnotify , это предшественник inotify и должен быть доступен в вашем ядре. Он все еще поддерживается новыми ядрами.

0 голосов
/ 11 сентября 2010

Да, цикл в Perl, как описано, сработает.

Вы можете отслеживать, когда каталог последний раз изменялся; если он не изменился, новой сборки нет. Если это изменилось, старая сборка могла быть удалена или добавлена ​​новая. Вы, вероятно, не хотите отправлять оповещения, когда старые сборки удаляются; крайне важно, чтобы электронное письмо отправлялось при добавлении новых сборок.

Однако я думаю, что msw имеет правильную идею; сборка должна уведомить, когда она завершила копирование в новый каталог. Это должен быть скрипт, который можно изменить для уведомления правильного списка людей, а не встроенный список имен в make-файле или любой другой системе управления сборкой, которую вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...