Este script enviará um arquivo via FTP e o excluirá. Mas, às vezes, o arquivo é excluído antes do término da transmissão e, em seguida, um arquivo vazio é recebido.
#!/bin/bash
tar czf <sourcefile> --directory=<directory> log
ftp -v -n $1 <<END_OF_SESSION
user <user> <password>
put <sourcefile> <targetfile>
bye
END_OF_SESSION
rm <sourcefile>
Qual seria uma boa forma de sincronizar os processos, de forma que a exclusão ocorra após o término do envio?
Conforme mostrado na atualização abaixo, a conexão às vezes não pode ser estabelecida.
Notas:
Executando no Lubuntu 16.04.
Atualizado com a tar
linha.
informações de log para uma sessão com falha:
Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090056
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
221 Goodbye.
e um sucesso:
Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090344
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
6901 bytes sent in 0.00 secs (43.5848 MB/s)
221 Goodbye.
O
ftp
comando não tem funcionalidade para permitir que você verifique se a transferência foi bem-sucedida. Se você deve continuar usando esta implementação de transferência FTP, duas alternativas são:ls
no cliente FTP e verifique se o tamanho do arquivo corresponde às expectativas. Lembre-se de quels
depende do servidor e pode variar de implementação de servidor para implementação.A melhor solução (além de substituir totalmente o FTP por
rsync
ouscp
) é usar um cliente FTP diferente que forneça um status de transferência confiável.O
lftp
comando deve estar disponível na maioria das distribuições do Linux. O-E
sinalizador configura oput
comando para agir mais comomv
:cp
ele exclui o arquivo de origem após uma transferência bem-sucedida.