2010-09-11 3 views
5

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

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

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

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

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

  • У нас есть уже существующая программа или библиотека Perl, который делает это?

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

Я думаю, что в Perl может быть простой способ.

  • Считаете ли вы, что это сработает?

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

+1

Почему вы не можете обновить ядро ​​- это довольно старый сейчас, последние стабильные ядра теперь равны 2.6.34.5 и 2.6.35.4 соответственно .... – t0mm13b

+0

@ tommieb75: company machine => невозможно. – Lazer

+2

Знать, когда сборка будет выполнена, будет сложной. Возможно, «mail -s» построит сделать «Lazer» как последний шаг в 'make build'? – msw

ответ

3

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

Вот пример в Баш, вы можете запустить его через каждые 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: [email protected] 
To: [email protected] 
Subject: New files found 

Dear friend, 
I have found a couple of new files. 
" 
fi 
+0

[Как это выглядело бы в сценарии оболочки C] (http://stackoverflow.com/questions/3692137/whats-wrong-with-this-c-shell-script)? – Lazer

1

Может не быть простой скрипт?

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

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

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

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

5

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

0

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

Смежные вопросы