91

Re: Скрипты

Не про Maemo.

Пишу сейчас скрипт/демон на bash мониторящий логи FTP сервера на предмет заливки файлов и выполняющий при заливке долгое и ресурсоёмкое действие (find по всему содержимому FTP, в условиях той площадки на которй скрипт будет крутиться это очень ресурсоёмко).

Взял за основу демона Nas_tradamus-а (за которого ему спасибо) так как под изначальные требования он очень хорошо подходил.
Но когда всё уже было готово я заметил одну неувязочку: файлы могут заливать и не по одному (скорее всего их будут заливать кучками). Если на каждый из сотни заливаемых файлов запускать ftnd это будет несколько не оптимально.

Пока пришёл к выводу что перед выполнением find нужно ждать какое-то время (превышающее максимальное время заливки одного файла (с допущением что вас файла не более n и заливают его не через DialUP)) проверять не было-ли за это время других заливок, если были то ждать ещё, если не было то выполнять find.
Пока придумал только одну реализацию, она кажется мне самому корявой, к тому-же требует использования тредов, реализацию которых в shell-скриптах я представляю себе слабо (видимо только через &).

Может есть у кого идеи?
Сейчас это выглядит так:

#!/bin/bash
check() {
                if echo $line | grep -q "b _ i" -; then
                        echo 'тут должен был быть find'
                fi
        }

monitor() {
          tailf /var/log/proftpd/xferlog | while read line ; do check ; done
          }
monitor
exit 0

P.S. я не программист, совсем не программист, да и башка после рабочего дня не варит. Так что не пинайте.

На форуме появляюсь редко, но N900 пользоваться не перестал, если вдруг что-то нужно пишите в jabber или eMail
Jabber: mrclon@jabnet.org

Поделиться

92

Re: Скрипты

MrClon

Так что find делать-то должен? )

Может не надо заморачиваться. Скорее всего, proftpd поддерживает хуки, проверяющие вновь залитый файл на соответствие какому-либо шаблону и выполняющие действия над ним.

Опиши задачу конкретней. )

Nokia N-Gage QD -> Nokia N900

Поделиться

93

Re: Скрипты

Создание списка всех файлов определённого типа имеющихся на серваке. Генерация плэйлиста. Файлы могут не только добавляться но и удаляться, так что вариант с find выглядит более простым (во всяком случае он так выглядел).

Кстати часто слышал негативные отзывы о фишке которую ты предложил использовать, говорят уязвимая штука.

На форуме появляюсь редко, но N900 пользоваться не перестал, если вдруг что-то нужно пишите в jabber или eMail
Jabber: mrclon@jabnet.org

Поделиться

94

Re: Скрипты

Попробую реализовать идею с тредами, в конце концов будет чем заняться на работе (:

Правда на сколько я понимаю треды в баше реализованы только через &, т.е. что-то вроде:
thread() {
        echo 'thread'
}'
thread &

Не вполе понимаю как такой тред надёжно килять вместе со скриптом.

На форуме появляюсь редко, но N900 пользоваться не перестал, если вдруг что-то нужно пишите в jabber или eMail
Jabber: mrclon@jabnet.org

Поделиться

95 (20.08.2010 13:09:38 отредактировано Nas_tradamus)

Re: Скрипты

Там так важна актуальность плэйлиста, что нельзя исполнять это дело по крону раз в n часов/минут?

Вообще, я бы такое писал на Perl. Изучить его синтаксис можно за день, зато какое удобство и мощь...

Кстати, ftp-сервер можно настроить так, что пока файл не залит до конца, он ему дает имя ~filename.tar.

А разве задачу нельзя решить так? :

1) Пускаем вывод tailf  в функцию, которая мониторит xferlog на предмет добавления нового файла определенного формата, а также, на предмет удаления (grep или egrep с двойным шаблоном).
2) Если выдается положительный результат (добавлен или удален файл), то вносим коррективы в БД с плейлистом.

Nokia N-Gage QD -> Nokia N900

Поделиться

96

Re: Скрипты

Nas_tradamus пишет:

Там так важна актуальность плэйлиста, что нельзя исполнять это дело по крону раз в n часов/минут?

Да вот уже тоже ко крону склоняюсь, но не хочется нагружать хард без нужды. Ну и вообще раз уж начал, надо закончить.

Про перл согласен, великая вещь, просто уже начал на bash делать.

Добавлено: 20.08.2010 13:22:04

В xferlog пишутся только скаивания и заливки файлов. Да и основной лог proftpd скуден до невозможности (хотя это наверное можно исправить).

На форуме появляюсь редко, но N900 пользоваться не перестал, если вдруг что-то нужно пишите в jabber или eMail
Jabber: mrclon@jabnet.org

Поделиться