Запуск скрипта при появлении файла, как реализовать

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 13:24:42

Здравствуйте.
Есть ПО - minidlna, которое по протоколу DLNA раздает аудио-видео контент. Контент проигрывает несколько телевизоров.
НО у minidlna не работает функция автообновления своей БД при изменении контента (добавился или удалился файл).
Решаю задачу скриптом, по которому minidlna сканирует папки и перезапускается. Но при этом все сессии сбрасываются.
Подскажите как реализовать запуск скрипта обновления контента, ТОЛЬКО при добавлении или удалении файлов в папке. Доступ к папке можно организовать по smb или ftp.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

mak_v_
проходил мимо

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение mak_v_ » 2013-03-25 14:05:13

В голову только лезет парсинг лога самбы на предмет "положили", "забрали" и запуск обновления БД.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 14:18:13

Есть идея: создать папку в которую будут помещаться файлы. Раз в например 5 минут проверять есть ли в ней файлы. Если есть переносить файл в папку с контентом, запускать скрипт обновление БД minidlna.
Но это как-то костылеобразно.
Может есть у кого какие-нибудь идеи?

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 15:05:33

densan писал(а):Здравствуйте.
Есть ПО - minidlna, которое по протоколу DLNA раздает аудио-видео контент. Контент проигрывает несколько телевизоров.
НО у minidlna не работает функция автообновления своей БД при изменении контента (добавился или удалился файл).
Решаю задачу скриптом, по которому minidlna сканирует папки и перезапускается. Но при этом все сессии сбрасываются.
Подскажите как реализовать запуск скрипта обновления контента, ТОЛЬКО при добавлении или удалении файлов в папке. Доступ к папке можно организовать по smb или ftp.
Чо эт у меня minidlna сам файлы не сразу правда но видит. Самое простое решение скрипт кроном запускать раз в минуту или реже. А так можно демона написать на перле например.
Насколько я помню, у minidlna есть ключ force reload или типа того, как раз для ваших нужд почему просто не закронить его?
Только что у меня minidlna под линупсами.

spf
ефрейтор
Сообщения: 56
Зарегистрирован: 2009-11-05 15:28:46

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение spf » 2013-03-25 15:13:14

В портсах есть sysutils/wait_on.
Info: Enable shell scripts to monitor directories for new files

На его основе можно сделать типа такого:

Код: Выделить всё

while :; do
  wait_on $file
  reload_minidlna
done

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 15:34:50

BlitzKrieg писал(а):Чо эт у меня minidlna сам файлы не сразу правда но видит.
А можно версию minidlna и sqlite?
У меня minidlna-1.0.24_2,1
Очистил каталог с видео-контентом, удалил бд minidlna. Скопировал 1 фильм. Запустил minidlna. Создалась новая БД. Смотрю в бд

Код: Выделить всё

sqlite3 /var/db/minidlna/files.db
sqlite> select * from OBJECTS;
....
18|64$0|64||item.videoItem|19|Hamilton_I_Nationens_Intresse_by_ghostrider_15
19|2$15$0|2$15|64$0|item.videoItem|19|Hamilton_I_Nationens_Intresse_by_ghostrider_15
20|2$8$0|2$8|64$0|item.videoItem|19|Hamilton_I_Nationens_Intresse_by_ghostrider_15
- фильм виден.

закинул еще один фильм, выполнил /usr/local/etc/rc.d/minidlna rescan
в логах

Код: Выделить всё

[2013/01/04 21:27:20] scanner.c:808: warn: Scanning /usr/torrents/downloads finished (2 files)!
[2013/01/04 21:27:20] playlist.c:126: warn: Parsing playlists...
смотрю в бд

Код: Выделить всё

18|64$0|64||item.videoItem|19|Baikonur.2011.DVDRip
19|2$15$0|2$15|64$0|item.videoItem|19|Baikonur.2011.DVDRip
20|2$8$0|2$8|64$0|item.videoItem|19|Baikonur.2011.DVDRip
21|64$1|64||item.videoItem|20|Hamilton_I_Nationens_Intresse_by_ghostrider_15
22|2$15$1|2$15|64$1|item.videoItem|20|Hamilton_I_Nationens_Intresse_by_ghostrider_15
23|2$8$1|2$8|64$1|item.videoItem|20|Hamilton_I_Nationens_Intresse_by_ghostrider_15
Т.е. в БД данные о 2-м фильме появились.
Но при обращении DLNA-клиентом Samsung C630, Проигрыватель Windows Media виден ТОЛЬКО 1 файл. Второй файл не появится до перезапуска демона dlna.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 16:04:52

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

Код: Выделить всё

root@box:/etc/init.d# minidlna -V
Version 1.0.21

Код: Выделить всё

ii  libsqlite3-0                           3.7.9-2ubuntu1.1                           SQLite 3 shared library

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 16:11:42

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

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 16:29:29

Запускаю minidlna rc-скриптом идущим в комплекте с портом.
На freebsd функция inotify, которую использует minidlna, работать не будет, т.к. это фукция ядра линукс (http://ru.wikipedia.org/wiki/Inotify).
Но вот почему minidlna после обновления БД командой rescan не отдает обновленный плей-лист клиенту - не знаю.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 16:45:58

С какими параметрами rc скрипт запускает minidlna?
notify_interval чему равен?

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 17:11:49

в minidlna.conf интервал указан 895 сек
попробовал запустить командой

Код: Выделить всё

minidlna -t 100 -P /var/db/minidlna/minidlna.pid -u dlna -f /usr/local/etc/minidlna.conf
закинул файл, подождал 10 минут включил телевизор, телевизор новый файл не видит.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 17:19:23

Показалось :-)

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 17:25:13

Вы еще на вс. сл. файлик туда суйте какой-нибудь из заведомо видимых. У меня конкретно с minidlna были какие-то беды с avi файлами. Вот не помню, чего делал, но помню, что чего-то делал и только потом стало их показывать.
Все же таки покажите конфиг.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-25 19:00:11

Код: Выделить всё

 cat /usr/local/etc/minidlna.conf | grep -v '^#' | sed '/^$/d' | more
port=8200
media_dir=V,/ftp/video
db_dir=/var/db/minidlna
log_dir=/var/db/minidlna
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
inotify=yes
enable_tivo=no
strict_dlna=no
notify_interval=100
serial=12345678
model_number=1
файлы avi, но dlna видит их без проблем.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 19:18:09

densan писал(а):

Код: Выделить всё

 cat /usr/local/etc/minidlna.conf | grep -v '^#' | sed '/^$/d' | more
port=8200
media_dir=V,/ftp/video
db_dir=/var/db/minidlna
log_dir=/var/db/minidlna
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
inotify=yes
enable_tivo=no
strict_dlna=no
notify_interval=100
serial=12345678
model_number=1
файлы avi, но dlna видит их без проблем.
Так как логические действия вобщем-то закончились, то я бы попробовал так:
media_dir=/ftp/video
inotify=no
notify_interval=10
Не помню уже чего делал, когда avi не виделось, но как-будто бы что-то в media_dir поменял... не помню уже правда.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-25 19:33:20

Отключил inotify, при ручном перезапуске файл виден в телике.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-26 11:46:12

При любых комбинациях с inotify minidlna не видит новые файлы.

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-26 11:53:57

Похожую проблему решают пользователи freenas http://forums.freenas.org/showthread.ph ... c-Scan-Fix
Проблему решают rc-скриптом, который перезапускает демон minidlna при появлении новых файлов. Попробую посмотреть их скрипт и попытаться доработать его до скрипта который будет перезапускать minidlna ТОЛЬКО если нет активных коннектов.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-26 21:06:39

А другой dlna сервер вы не рассматриваете?

densan
ст. сержант
Сообщения: 370
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение densan » 2013-03-27 12:38:19

Пробовал xupnpd из-за возможности на не-SMART телевизорах через dlna получить доступ к IP-TV и веб-ресурсам как например ivi.
Но у него возможностей по раздаче локального контента меньше.
Если посоветуешь другой dlna сервер - посмотрю.

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Запуск скрипта при появлении файла, как реализовать

Непрочитанное сообщение BlitzKrieg » 2013-03-27 20:09:10

densan писал(а):Пробовал xupnpd из-за возможности на не-SMART телевизорах через dlna получить доступ к IP-TV и веб-ресурсам как например ivi.
Но у него возможностей по раздаче локального контента меньше.
Если посоветуешь другой dlna сервер - посмотрю.
Сам не пробовал, но ushare рассматривал в случае если minidlna не устроил бы.