Страница 1 из 1

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

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

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

Добавлено: 2013-03-25 14:05:13
mak_v_
В голову только лезет парсинг лога самбы на предмет "положили", "забрали" и запуск обновления БД.

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

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

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

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

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

Добавлено: 2013-03-25 15:13:14
spf
В портсах есть sysutils/wait_on.
Info: Enable shell scripts to monitor directories for new files

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

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

while :; do
  wait_on $file
  reload_minidlna
done

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

Добавлено: 2013-03-25 15:34:50
densan
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.

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

Добавлено: 2013-03-25 16:04:52
BlitzKrieg
Я что-то подобное наблюдал при начале использования minidlna. Но потом как-то перестал подобное поведение замечать. На данный момент после того, как фильм загружен, я сразу же могу его выбрать на телевизоре.

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

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

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

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

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

Добавлено: 2013-03-25 16:11:42
BlitzKrieg
Вобщем факт в том, что мне перезапускать minidlna не приходится. Приходилось это делать только при установке и настройке.
Кстати покажите строку запуска minidlna.

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

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

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

Добавлено: 2013-03-25 16:45:58
BlitzKrieg
С какими параметрами rc скрипт запускает minidlna?
notify_interval чему равен?

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

Добавлено: 2013-03-25 17:11:49
densan
в minidlna.conf интервал указан 895 сек
попробовал запустить командой

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

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

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

Добавлено: 2013-03-25 17:19:23
BlitzKrieg
Показалось :-)

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

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

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

Добавлено: 2013-03-25 19:00:11
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 видит их без проблем.

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

Добавлено: 2013-03-25 19:18:09
BlitzKrieg
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 поменял... не помню уже правда.

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

Добавлено: 2013-03-25 19:33:20
BlitzKrieg
Отключил inotify, при ручном перезапуске файл виден в телике.

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

Добавлено: 2013-03-26 11:46:12
densan
При любых комбинациях с inotify minidlna не видит новые файлы.

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

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

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

Добавлено: 2013-03-26 21:06:39
BlitzKrieg
А другой dlna сервер вы не рассматриваете?

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

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

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

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