Отслеживание файла по FTP

Отслеживание файла по FTP

Я пытаюсь получить доступ к большим файлам журнала на удаленном сервере с моего рабочего стола Windows. Ятолькоиметь FTP-доступ к этой удаленной машине, а не SSH-доступ.

В данный момент я использую WinSCP, чтобы загрузить весь файл по FTP. Это означает, что мне придется каждый раз передавать весь файл. Однако, учитывая, что это файл журнала, мне, скорее всего, понадобятся только последние несколько строк.

Это особенно раздражает, поскольку моя пропускная способность сильно ограничена, поэтому передача всего файла занимает несколько минут.

Если бы у меня был доступ к оболочке, это можно было бы легко сделать, используя что-то вроде tail -100получения последних 100 строк.

Я хотел бы найти решение, чтобы сделать это через FTP. Обратите внимание, что это не обязательно должен быть непрерывный хвост, достаточно будет и одноразового.

решение1

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

Хотя с точки зрения пользователя я не знаю, поддерживает ли какой-либо FTP-клиент явную загрузку только заданного количества конечных байтов.

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

В частности, с WinSCP, просто инициируйте загрузку файла журнала. Затем, наЗапрос на подтверждение перезаписи, выберитеРезюме(он находится в выпадающем менюНет(кнопка). Обратите внимание, что эта опция, очевидно, доступна только в том случае, если исходный файл больше конечного файла.

Если вы действительно хотите загрузить только последние несколько строк журнала, вы можете обмануть WinSCP, создав фиктивный локальный файл размером немного меньше файла журнала перед началом загрузки.

Вы также можете легко автоматизировать описанный выше трюк:

fsutil file createnew mylog.log 100000000
winscp.com /command "open mysession" "get -resume /path_to_log/mylog.log" "exit"

Для альтернатив см fsutil.Быстро создать большой файл в системе Windows?

Приложив больше усилий, вы можете изменить скрипт так, чтобы он сначала проверял размер файла журнала и автоматически вычислял фиктивный размер файла на несколько килобайт меньше размера журнала.

решение2

Я не знаю, как это можно сделать с помощью WinSCP, и, конечно, это может быть невозможно, но в целом вы должны иметь возможность использоватьОТДЫХкоманда. СмотритеRFC3659. Мне не ясно, можно ли начать загрузку с конца файла, или вам нужно уже получить маркеры. RFC 3659 указывает, что это возможно, по крайней мере в режиме STREAM:

Передачи в режиме STREAM с FILE STRUcture могут быть перезапущены, даже если маркер перезапуска не был передан в дополнение к самим данным. Это делается с помощью команды SIZE, если необходимо, в сочетании с командой RESTART (REST) ​​и одной из стандартных команд передачи файлов.

решение3

Я не слышал о каком-либо программном обеспечении, которое поддерживает ваши потребности. Но если вы программист, вы должны понимать, как писать это на Perl.

Вот я нашел пример, как получить все файлы. Это не ваше решение, но оно поможет вам понять, как это сделать: http://www.perlmonks.org/?node_id=907019

другой, помощь для библиотеки Net::FTP : http://search.cpan.org/dist/libnet/Net/FTP.pm

с помощью этого вы можете открыть ftp-подключение к серверу (первый пример) и выполнить авторизацию (первый пример)

второй URL поможет вам получить последнюю часть файла с помощью методов: ->ascii установить режим передачи на ascii, так как это файл журнала ->size (FILE) получить размер файла для подсчета, с чего следует начать ->restart (WHERE) установить файловый курсор, с которого в файле вы хотите начать чтение ->read (BUFFER, SIZE [, TIMEOUT ]) напрямую прочитать небольшую часть SIZE в переменную BUFFER

другие функции: length(BUFFER) говорят вам, сколько данных вы получаете. Если это НОЛЬ, вы, вероятно, достигли EOF print ("$BUFFER\n") простая печать содержимого буфера на экран

Обратите внимание, это не полное решение, а способ, как это сделать. Единственная причина, по которой я все это пишу, заключается в том, что, вероятно, нет программного обеспечения, готового для вашей задачи.

Если вы не знаете, как написать эту программу, просто спросите на stackoverflow.com , не superuser. Есть много программистов, которые готовы помочь.

Если возможно, проверьте, поддерживает ли ваш ftp-сайт возобновление загрузки. Без этого чтение конечной части файла невозможно.

Другим частичным решением может быть ротация файла журнала, один файл в день или час. Это зависит от того, насколько быстро растет файл журнала.

Связанный контент