LINUX.ORG.RU

изменение файла на ftp


0

0

Как по сетке отслеживать изменения файла на FTP-сервере и при их наличии выполнять действия на клиенте. Желательно попорще как-нибудь(типа bash скрипта). Может проги есть какие ?

anonymous

Ну, в общих чертах, алгоритм:

1) man lftp на предмет -f (можно и -e)

2) для lftp написать скрипт, который законнектится на сервер и получит листинг (ls) необходимого файла

3) в bash перехватить листинг и распарсить его на предмет modify time и size

4) сравнить с результатом предыдущего парсинга

5) если результаты не совпадают, то сохранить текущие результаты в качестве предыдущих и выполнить программы (действия) на клиенте.

Slavaz ★★★★★
()

я бы ещё поковырял в сторону rsync

rudchenkos
()
Ответ на: комментарий от generatorglukoff

Оба варианта требуют прав рута. Если у топистартера их есть, то слежение за файлом можно сделать менее жопногландовым путём (предыдущему оратору: rsync --list-only при sshном доступе к серваку - это самое то). Скорей всего, у топикстартера обычный хостинг с ftp-only доступом, поэтому решение через lftp. Либо через curlftpfs, но этот вариант не беру в расчёт из-за низкой надёжности соединения при узких или загруженных каналах... хотя он и является наиболее прямым - ftp-хостинг становится частью ФС клиента; можно просто stat натравливать на нужный файл.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

> 3) в bash перехватить листинг и распарсить его на предмет modify time и size

Вот здесь вопрос: а как перехватить bach'em вывод ls ? Например, при запуске lftp -f cmd_file видно, что все выполняется, но в bash ничего не выводится (не передается), т.е. где-то там внутри выполняется. При -e все, что надо выводится на экран, но продолжает выполняться lftp пока exit не введеш.

anonymous
()
Ответ на: комментарий от Slavaz

Ситуация такая: в локальной сети 2 (например) компа, на одном поднят ftp, нужно со второго отслеживать изменение файла. Решение с lftp кажется наиболее простым, только вот вывод ls в bash'e поиметь бы )

anonymous
()
Ответ на: комментарий от anonymous

PREV_SAVE="/path/to/previous/save.tmp"

ANSWER_STR=$(lftp -f '/path/to/script.lftp'| grep $ACCOUNTING_FILE_NAME)

[ ! -f $PREV_SAVE ] && touch $PREV_SAVE

[ "$ANSWER_STR" != "$(cat $PREV_SAVE)" ] && {
echo -n "$ANSWER_STR" >$PREV_SAVE
# тут выполняем что-то при изменении файла на ftp
}

exit 0

ну и потом это по крону.

Slavaz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.