Eu tenho o sftp configurado em uma instância do aws ec2. Um cliente na transferência de um arquivo de 20 MB a 30 MB durante todas as noites. Cerca de metade do tempo em que a transferência não funciona e não consigo descobrir o porquê. Eu já tentei de vários clientes e nunca vi isso não funcionar. Hoje eu estava no servidor enquanto a transferência de arquivos estava acontecendo e eu estava assistindo os logs ao vivo. Aqui está uma amostra da saída:
Aug 17 09:01:19 internal-sftp[16260]: session opened for local user someuser from [55.66.77.88]
Aug 17 09:01:19 internal-sftp[16260]: received client version 4
Aug 17 09:01:19 internal-sftp[16260]: realpath "."
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3294: sent names count 1
Aug 17 09:01:19 internal-sftp[16260]: opendir "/somedir"
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 1110: sent handle handle 0
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: readdir "/somedir" (handle 0)
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: sent names count 3
Aug 17 09:01:19 internal-sftp[16260]: debug1: request 3021: readdir "/somedir" (handle 0)
Aug 17 09:01:19 internal-sftp[16260]: sent status End of file
Aug 17 09:01:20 internal-sftp[16260]: closedir "/somedir"
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
Aug 17 09:01:20 internal-sftp[16260]: open "/somedir/thefile.zip" flags WRITE,CREATE,TRUNCATE mode 0666
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1383: sent handle handle 0
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 0 len 32739
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
Aug 17 09:01:20 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 32739 len 32739
Aug 17 09:01:20 internal-sftp[16260]: sent status Success
(more of the same...)
Aug 17 09:01:54 internal-sftp[16260]: debug1: request 1234: write "/somedir/thefile.zip" (handle 0) off 27238848 len 10072
Aug 17 09:01:55 internal-sftp[16260]: sent status Success
Aug 17 09:01:55 internal-sftp[16260]: close "/somedir/thefile.zip" bytes read 0 written 27248920
Aug 17 09:01:55 internal-sftp[16260]: sent status No such file
Aug 17 09:01:55 internal-sftp[16260]: debug1: read eof
Aug 17 09:01:55 internal-sftp[16260]: session closed for local user someuser from [55.66.77.88]
Se você comparar esses logs com os logs para obter uma transferência de arquivos bem-sucedida, a única diferença será no final. Quando a transferência de arquivos é bem sucedida, diz
Aug 16 09:01:20 internal-sftp[12200]: sent status Success
Considerando que, quando falha, diz
Aug 17 09:01:55 internal-sftp[16260]: sent status No such file
O arquivo leva de 20 a 30 segundos para ser transferido e nunca no momento em que o arquivo realmente apareceu no disco quando executei ls
no diretório somedir
. Quando a transferência foi bem-sucedida, o arquivo apareceu imediatamente no disco antes mesmo de a transferência ser concluída. Então, o log está correto, não há arquivos, mas não consigo entender por que não. Como você pode ver, está escrevendo mais de 27 MB para o servidor.
Uma coisa a considerar é que eu tenho uma ferramenta chamada s3fs-fuse em execução no diretório /somedir
. Essa ferramenta sincroniza um diretório com um bucket do AWS S3 para que o que for gravado ou excluído do diretório seja gravado ou excluído do bucket. Eu acho que pode fazer algumas coisas de baixo nível com o sistema de arquivos. Não tenho certeza se talvez isso tenha algo a ver com isso.
Alguma idéia?