Rastreando um arquivo por FTP

Rastreando um arquivo por FTP

Estou tentando acessar arquivos de log grandes em um servidor remoto na área de trabalho do Windows. EUapenastenha acesso FTP a esta máquina remota, não acesso SSH.

No momento, estou usando o WinSCP para baixar o arquivo inteiro por FTP. Isso significa que sempre tenho que transferir o arquivo completo. No entanto, como é um arquivo de log, provavelmente precisarei apenas das últimas linhas.

Isso é particularmente frustrante, pois minha largura de banda é severamente limitada, então a transferência do arquivo inteiro leva alguns minutos.

Se eu tivesse acesso ao shell, isso poderia ser facilmente conseguido usando algo como tail -100obter as últimas 100 linhas.

Gostaria de encontrar uma solução para fazer isso via FTP. Observe que não precisa ser uma cauda contínua, apenas uma única seria suficiente.

Responder1

O que você deseja fazer definitivamente pode ser feito com FTP. Tecnicamente é o mesmo que qualquer cliente FTP faz ao retomar o download de um arquivo interrompido.

Embora da perspectiva do usuário, eu não saiba se algum cliente FTP suporta um download explícito de apenas um determinado número de bytes finais.

Mas alguns clientes FTP definitivamente permitirão que você baixe novos conteúdos de arquivos que você baixou anteriormente.

Particularmente com WinSCP, basta iniciar o download do arquivo de log. Então, noSolicitação de confirmação de substituição, selecione osRetomar(está no menu suspenso doNãobotão). Observe que a opção está obviamente disponível apenas se o arquivo de origem for maior que o arquivo de destino.

Se você realmente deseja baixar apenas as últimas linhas do log, você pode enganar o WinSCP, criando um arquivo local fictício com um tamanho um pouco menor que o arquivo de log antes de iniciar o download.

Você também pode automatizar facilmente o truque acima:

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

Para alternativas ao fsutil, consulteCriar rapidamente arquivos grandes em um sistema Windows?

Com mais esforço, você pode modificar o script para primeiro verificar o tamanho do arquivo de log e calcular automaticamente o tamanho do arquivo fictício, alguns quilobytes menor que o tamanho do log.

Responder2

Não sei como você pode fazer isso usando o WinSCP e, de fato, pode não ser possível, mas em geral, você deve conseguir usar oDESCANSARcomando. VerRFC 3659. Não está claro para mim se você pode iniciar o download mais tarde no arquivo ou se você já precisa ter recebido os marcadores. RFC 3659 indica que isso é possível, pelo menos no modo STREAM:

As transferências no modo STREAM com FILE STRUcture podem ser reiniciadas mesmo que nenhum marcador de reinicialização tenha sido transferido além dos próprios dados. Isso é feito usando o comando SIZE, se necessário, em combinação com o comando RESTART (REST) ​​e um dos comandos padrão de transferência de arquivos.

Responder3

Não ouvi falar de nenhum software que atenda às suas necessidades. Mas se você é programador, deve entender como escrever isso em Perl.

Aqui encontrei um exemplo de como obter todos os arquivos. Esta não é a sua decisão, mas ajuda você a entender como fazer: http://www.perlmonks.org/?node_id=907019

outro, ajuda para a biblioteca Net::FTP : http://search.cpan.org/dist/libnet/Net/FTP.pm

usando isso você pode abrir a conexão FTP com o servidor (primeiro exemplo) fazer autorização (primeiro exemplo)

o segundo URL ajuda você a obter a última parte do arquivo usando métodos: ->ascii define o modo de transferência para ascii porque este é o arquivo de log ->size ( FILE ) obtém o tamanho do arquivo para contar onde você deve começar ->restart ( WHERE ) set file curso de onde no arquivo você deseja começar a ler -> ler (BUFFER, SIZE [, TIMEOUT]) ler diretamente a pequena parte SIZE na variável BUFFER

outras funções: length(BUFFER) informam quantos dados você obtém. Se for ZERO, você provavelmente alcançou o conteúdo do buffer de impressão simples de impressão EOF ("$BUFFER\n") na tela

Observe que esta não é uma resolução completa, mas uma maneira de fazer isso. Apenas uma razão pela qual escrevo tudo isso é que provavelmente não há software pronto para sua tarefa.

Se você não sabe como escrever esse programa, basta perguntar em stackoverflow.com , não no superusuário. Existem muitos programadores que estão prontos para ajudar.

Se for possível, verifique se o seu site FTP suporta a retomada do download. Sem esta leitura, a parte final do arquivo é impossível.

Outra resolução parcial pode ser a rotação do arquivo de log, um arquivo por dia ou por hora. isso depende da rapidez com que o arquivo de log cresce.

informação relacionada