11

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

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

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

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

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

3 ответа3

8

То, что вы хотите сделать, определенно можно сделать с помощью 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?

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

0

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

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

0

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

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

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

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .