Você consegue que o computador remoto crie um arquivo antes de iniciar o upload dos arquivos e depois os exclua depois?
por exemplo. usando ssh (semelhante pode ser feito com ftp ou HTTP PUT):
ssh yourhost touch ../Test_Data/upload-in-progress
scp local_enc* yourhost:../Test_Data/
ssh yourhost rm ../Test_Data/upload-in-progress
Depois, tudo o que o seu script precisa fazer é aguardar o desaparecimento do arquivo de upload em andamento. Isso pode ser feito com um loop de sono ou talvez usando inotifywait
do pacote inotify-tools
.
NOTA: Se o host remoto morrer ou seu script for eliminado antes de concluir o upload, ele deixará um arquivo obsoleto de upload em andamento. IMO este é um problema muito menor do que o risco de condições de corrida de tentar adivinhar quando o upload foi concluído (como todas as soluções em execução na máquina de destino por si só serão propensas)
Inicialmente, pensei em usar lsof | grep local_enc | wc -l
, mas isso é tão propenso a raças quanto seu find .. | wc -l
.
Como está usando inotify
ou similar para ser notificado das mudanças no diretório Test_Data - você pode dizer quando os arquivos são criados / alterados naquele diretório, mas isso não indica quando uma sessão de upload foi concluída ... inotify em combinação com um arquivo de semáforo iria funcionar. inotify para aguardar o diretório Test_Data ser alterado e, em seguida, inotify to sleep até que o upload em andamento tenha sido excluído.
Além disso, se o script de upload no host remoto for executado a partir do cron, o arquivo de upload em andamento corrigirá a si mesmo na próxima execução. Como alternativa, seu script poderia ser escrito para assumir que qualquer arquivo de upload em andamento com mais de X minutos é antigo e deve ser excluído / ignorado ( inotifywait
tem uma opção -t
ou --timeout
que seria útil aqui), mas atrasos na rede ou interrupções temporárias podem causar problemas aqui.