Como posso saber se um determinado arquivo terminou o upload de outro local?

4

Digamos que temos máquina 1 e máquina 2 .
Máquina 2 , que é baseada em Linux, está recebendo um arquivo ( Digamos que cat.jpg enviado via SCP a partir de máquina 1 (realmente não importa qual sistema operacional ..).

Como posso saber em máquina 2 , se o arquivo terminou de carregar em máquina 1 ?
Por favor, note que "sabendo" eu quero dizer, executando um comando (através de um cron que executa a cada minuto), e não por um evento orientado ("faça o scp emitir um comando quando terminar o upload").

Outra limitação que tenho é que não posso alterar nada na máquina 1 ou na forma como os arquivos SCP são processados.

Se realmente importa:

  • os arquivos transferidos são arquivos de vídeo, extensão MP4.
  • machine 2 é o ubuntu 10.10
por Doron 05.06.2011 / 09:41

4 respostas

4

você deve ser capaz de usar o comando lsof para verificar se o arquivo está aberto em outro programa.

lsof | grep filename

Se você obtiver um resultado, o arquivo estará aberto em outro processo e, provavelmente, ainda estará sendo enviado. Se o resultado estiver em branco, o arquivo terminou de ser carregado ou, possivelmente, a transferência falhou por algum motivo.

    
por 05.06.2011 / 11:53
1

Pode haver uma maneira mais inteligente de fazê-lo, mas nessas situações eu uso apenas ls para mostrar o tamanho do arquivo e depois espero que ele pare de mudar por um período de tempo razoável (10-20 segundos) :

watch ls -l *.mp4
    
por 05.06.2011 / 10:19
1
fuser -mv / 2>&1 | grep F

Isso listará todos os usuários, pid e arquivos abertos e por escrito em um determinado ponto de montagem.

    
por 10.06.2011 / 20:05
1

como root:

fuser filename

Se algo for impresso, o arquivo é usado atualmente por algum processo.

    
por 06.07.2011 / 20:18