Como transferir uma parte de um arquivo do sistema remoto via SCP?

1

Estou tentando buscar um arquivo de log que é atualizado repetidamente. Eu quero esse arquivo atualizado, mas não quero baixar o arquivo inteiro novamente e novamente a partir do sistema remoto via SCP.

Alguma ideia para conseguir isso no uso mínimo da rede?

    
por Akhil Gangula 29.01.2018 / 18:03

1 resposta

5

Com o SCP sozinho, não há realmente nenhuma solução. O protocolo permite apenas cópias completas de arquivos, não transferências parciais.

Se você estiver disposto a enxergar além do SCP, há algumas opções:

  1. Use um comando como o seguinte para gerar um arquivo contendo apenas as novas linhas do arquivo de log e transferi-lo:

    ssh user@host tail -n +'wc -l /local/file.log' /remote/file.log >> /local/file.log
    

    Isso contará as linhas no arquivo local e instruirá o sistema remoto a imprimir todas as linhas após esse número de linha na conexão SSH, que será então anexada ao arquivo local por redirecionamento de shell. Este método pode ser um pouco complicado em alguns shells, e é ligeiramente vigoroso (uma gravação chegando ao arquivo enquanto ele está sendo copiado pode acabar parcialmente transferida, mas não será completamente transferida pela próxima invocação).

  2. Use rsync com a opção --checksum . Isso permite transferências incrementais de dados e, por causa da soma de verificação de hash sem interrupção, deve transferir um mínimo absoluto de dados. Ao contrário do primeiro método, isso não é nada agressivo, mas também requer que o rsync esteja presente em ambas as extremidades.

  3. Configure um servidor da Web (seguro) que ofereça suporte a solicitações de intervalo de bytes. Em seguida, você pode usar uma solicitação HTTP HEAD para obter o novo tamanho de arquivo (opcionalmente com um cabeçalho If-Modified-Since para transformá-lo em não operacional se o arquivo não tiver sido alterado) e solicitar o intervalo de onde sua cópia termina no comprimento total relatado pelo pedido HEAD. Isso envolve a maioria das configurações e pode transferir linhas parciais, mas garante que você não pode perder dados.

  4. Descubra uma maneira de configurar o log remoto para o aplicativo que gera o arquivo de log e configure seu sistema local como um host de log. Isso só funciona, é claro, se o sistema local estiver ligado o tempo todo, mas também garante que você tenha a versão mais atualizada do registro possível sem precisar fazer nada à mão para atualizá-lo.

por 29.01.2018 / 20:55