The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проверять папку на обновления"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 02-Фев-05, 18:18  (MSK)
Здравствуйте, есть такая задача. Надо запускать некоторую команду только при условии, что содержимое опрелённой папки изменилось. Как мне посоветуете сделать это скриптом #!/bin/sh ?

Для конкретизации пусть команда будет `sleep 10`, а папка `/tmp`.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Проверять папку на обновления" 
Сообщение от Pablo Искать по авторуВ закладки(??) on 02-Фев-05, 18:30  (MSK)
>Здравствуйте, есть такая задача. Надо запускать некоторую команду только при условии, что
>содержимое опрелённой папки изменилось. Как мне посоветуете сделать это скриптом #!/bin/sh
>?
>
>Для конкретизации пусть команда будет `sleep 10`, а папка `/tmp`.

Посмотрите, может это вам поможет
http://mednet.ingv.it/homepage/delprete/dirmon/dirmon.html

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 02-Фев-05, 18:41  (MSK)
>Посмотрите, может это вам поможет
>http://mednet.ingv.it/homepage/delprete/dirmon/dirmon.html

Спасибо, но это черезчур.
Мне бы хотелось сделать это одним скриптом.

Что-то типа:
dir="/tmp"
run="sleep 10"
беск_цикл {
  если dir не изменился, то останов.
  иначе run
}
А запуск скрипта как демона я обеспечу.
Только вот на shell почти не умею скрипты писать, поэтому нужна помощь

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Проверять папку на обновления" 
Сообщение от Xenu emailИскать по авторуВ закладки on 02-Фев-05, 19:44  (MSK)
>>http://mednet.ingv.it/homepage/delprete/dirmon/dirmon.html
>
>Спасибо, но это черезчур.

зато тот демон позволяет реагировать на изменение практически сразу.
если же это не является жизнено необходимым то можно сделать что-то вроде вот этого примера.
----------------------
#!/bin/bash

ls -lsrt /path/to/dir &> /tmp/dir.check.1
while [ 1 ]
do
  ls -lsrt /path/to/dir &> /tmp/dir.check.2
  diff /tmp/dir.check.1 /tmp/dir.check.2 &> /dev/null
  [ $? -ne 0 ] && break
  mv /tmp/dir.check.2 /tmp/dir.check.1
  sleep 10
done

echo "Алё, /path/to/dir изменилось."
----------------------

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 02-Фев-05, 20:06  (MSK)
>зато тот демон позволяет реагировать на изменение практически сразу.
>если же это не является жизнено необходимым то можно сделать что-то вроде
>вот этого примера.
>----------------------
>#!/bin/bash
>
>ls -lsrt /path/to/dir &> /tmp/dir.check.1
>while [ 1 ]
>do
>  ls -lsrt /path/to/dir &> /tmp/dir.check.2
>  diff /tmp/dir.check.1 /tmp/dir.check.2 &> /dev/null
>  [ $? -ne 0 ] && break
>  mv /tmp/dir.check.2 /tmp/dir.check.1
>  sleep 10
>done
>
>echo "Алё, /path/to/dir изменилось."
>----------------------


У меня вопрос: а просто ls /path/to/dir в этом случае подойдёт? (чтобы меньше в dir.check хранить)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Проверять папку на обновления" 
Сообщение от Xenu emailИскать по авторуВ закладки on 02-Фев-05, 21:34  (MSK)
>
>У меня вопрос: а просто ls /path/to/dir в этом случае подойдёт? (чтобы
>меньше в dir.check хранить)

подойдет если надо ловить только добавление новых файлов, если же требуется ловить и изменения существующих то нужно ls -t, те опции я написал автоматически.

кстати sleep понимает не только целые числа, по крайней мере та имплементация что есть у меня под рукой, то есть можно задать sleep 0.1 и оно будет проверять через одну десятую секунды.

да и если директория содержит много файлов то могут быть проблемы.

все таки демон использующий возможности ОС мне кажется предпочтительней.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Проверять папку на обновления" 
Сообщение от Xenu emailИскать по авторуВ закладки on 02-Фев-05, 21:55  (MSK)
>>
>>У меня вопрос: а просто ls /path/to/dir в этом случае подойдёт? (чтобы
>>меньше в dir.check хранить)
>
>подойдет если надо ловить только добавление новых файлов, если же требуется ловить
>и изменения существующих то нужно ls -t, те опции я написал
>автоматически.

исправление 1: ls -lt
так как с -l больше шансов заметить изменения в директории
$ man ls

исправление 2: маленькое время sleep не гарантирует что изменения будут отловлены за это время, так как -l показывает время с точностью до минуты.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 03-Фев-05, 12:50  (MSK)
>да и если директория содержит много файлов то могут быть проблемы.

Не понимаю, какие могут возникнуть проблемы, если в директории много файлов?

>все таки демон использующий возможности ОС мне кажется предпочтительней.

Этот скрипт и будет запущен, как демон :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Проверять папку на обновления" 
Сообщение от regunkov Искать по авторуВ закладки(ok) on 03-Фев-05, 14:36  (MSK)
Привет!
Я тут немного не в тему.
Но очень хочется знать

> Этот скрипт и будет запущен, как демон :)

как это делается?
Как запустить скрипт как демон?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 03-Фев-05, 14:54  (MSK)
>Привет!
>Я тут немного не в тему.
>Но очень хочется знать
>
>> Этот скрипт и будет запущен, как демон :)
>
>как это делается?
>Как запустить скрипт как демон?


http://cr.yp.to/daemontools.html

Я пользуюсь этим.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "Проверять папку на обновления" 
Сообщение от chip emailИскать по авторуВ закладки(ok) on 03-Фев-05, 16:19  (MSK)
>Привет!
>Я тут немного не в тему.
>Но очень хочется знать
>
>> Этот скрипт и будет запущен, как демон :)
>
>как это делается?
>Как запустить скрипт как демон?

man nohup
+++ man на используемый shell
e.g., man sh /background


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 03-Фев-05, 14:07  (MSK)
>----------------------
>#!/bin/bash
>
>ls -lsrt /path/to/dir &> /tmp/dir.check.1
>while [ 1 ]
>do
>  ls -lsrt /path/to/dir &> /tmp/dir.check.2
>  diff /tmp/dir.check.1 /tmp/dir.check.2 &> /dev/null
>  [ $? -ne 0 ] && break
>  mv /tmp/dir.check.2 /tmp/dir.check.1
>  sleep 10
>done
>
>----------------------

Мне только не совсем понятно: какая команда тут выполняется при изменении директории?

Вот мой скрипт, написанный по этому примеру:
----------------------
#! /bin/sh
ls -lrt /usr/local/libexec/hm* &> /tmp/hmcheck.1

while [ 1 ]
do
  ls -lrt /usr/local/libexec/hm* &> /tmp/hmcheck.2
  diff /tmp/hmcheck.1 /tmp/hmcheck.2 &> /dev/null
[ $? -ne 0 ] && break
  mv /tmp/hmcheck.2 /tmp/hmcheck.1
  /usr/local/bin/cron_fill
  sleep 30
done
----------------------

Объясню: скрипт /usr/local/bin/cron_fill создаёт файл в /etc/cron.d/

Так вот, крон.д обновляется каждые 30 сек, хотя файлы с маской /usr/local/libexec/hm* не меняются.

Я, наверное, не туда вписал команду...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "Проверять папку на обновления" 
Сообщение от Xenu emailИскать по авторуВ закладки on 03-Фев-05, 18:28  (MSK)
честно говоря не я понял как должны обновлятся файлы /usr/local/libexec/hm*.
тот пример должен был завершатся по изменению дмректории и все команды после done должны выполнится.
вот версия которая висит постоянно и выполняет нечто по изменению директории. И еще почитал я man ls повнимательнее и нашел изумительный ключик --full-time. Теперь скрипт будет срабатывать по каждому чиху.
------------------
ls -t --full-time $DIR &> /tmp/dir.check.1

trap exit_signal INT QUIT TERM

while [ 1 ]
do
    ls -t --full-time $DIR &> /tmp/dir.check.2
    diff /tmp/dir.check.1 /tmp/dir.check.2 &> /dev/null
    if [ $? -ne 0 ]
    then
        echo "Здесь должна быть команда которую надо выполнить."
    fi
    mv /tmp/dir.check.2 /tmp/dir.check.1
    sleep 10
done
------------------
Если в директории много файлов, то ls будет долго работать. Относительно долго. И дергать hard каждые сколько-ко там секунд.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "Проверять папку на обновления" 
Сообщение от alexeylomov Искать по авторуВ закладки(ok) on 03-Фев-05, 18:50  (MSK)
>честно говоря не я понял как должны обновлятся файлы /usr/local/libexec/hm*.
>тот пример должен был завершатся по изменению дмректории и все команды после
>done должны выполнится.
>вот версия которая висит постоянно и выполняет нечто по изменению директории. И
>еще почитал я man ls повнимательнее и нашел изумительный ключик --full-time.
>Теперь скрипт будет срабатывать по каждому чиху.
>------------------
>ls -t --full-time $DIR &> /tmp/dir.check.1
>
>trap exit_signal INT QUIT TERM
>
>while [ 1 ]
>do
>    ls -t --full-time $DIR &> /tmp/dir.check.2
>    diff /tmp/dir.check.1 /tmp/dir.check.2 &> /dev/null
>    if [ $? -ne 0 ]
>    then
>        echo "Здесь должна быть
>команда которую надо выполнить."
>    fi
>    mv /tmp/dir.check.2 /tmp/dir.check.1
>    sleep 10
>done
>------------------
>Если в директории много файлов, то ls будет долго работать. Относительно долго.
>И дергать hard каждые сколько-ко там секунд.


да мне раз в минуту более чем достаточно :)
Ясно, понял свою ошибку. Сейчас всё ок. Спасибо.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "Проверять папку на обновления" 
Сообщение от dimus emailИскать по авторуВ закладки(??) on 07-Фев-05, 10:09  (MSK)
Есть очень полезная команда md5sum, которая рожает контрольную сумму md5 и может ее проверить, ежели запустить ее с ключиком --check. Обмануть ее ОЧЕНЬ сложно. Можно вычислять контрольные суммы листингов и сравнивать их. Правда нагрузка на проц будет больше, чем при использовании diff
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "Проверять папку на обновления" 
Сообщение от MaximKuznetsov Искать по авторуВ закладки on 07-Фев-05, 22:06  (MSK)
>Есть очень полезная команда md5sum, которая рожает контрольную сумму md5 и может
>ее проверить, ежели запустить ее с ключиком --check. Обмануть ее ОЧЕНЬ
>сложно. Можно вычислять контрольные суммы листингов и сравнивать их. Правда нагрузка
>на проц будет больше, чем при использовании diff
можно еще приколотся и сделать прикол с make ;-)
что-то вроде
---Makefile
flag_file : /tmp/*
   my_script
   touch flag_file
--- через крон или какой либо другой скрипт тыркать make ;-)


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру