Como posso saber quando um FTP está completo?

2

Eu tenho um cron job que processa arquivos que meu cliente envia via FTP para o meu servidor FreeBSD. O cron job é executado uma vez por hora e, normalmente, o processamento de cada arquivo leva apenas alguns segundos.

O cron job procura no diretório de upload do cliente e move qualquer novo arquivo para um diretório tmp. Em seguida, ele processa o (s) arquivo (s) e os move para um diretório final, onde eles ficam disponíveis para o público por meio de um site.

O problema é que, de vez em quando, a tarefa cron é executada apenas quando um novo arquivo é carregado. Ele move o arquivo parcialmente carregado para o diretório tmp e tenta processá-lo, e falha, é claro.

Pergunta: como posso determinar se o arquivo enviado está completo? A única coisa em que consigo pensar é em verificar o tamanho do arquivo para ver se ele está mudando, mas parece um kludge. Existe algum tipo de sinalizador ou algo definido quando o upload está concluído?

    
por identry 28.05.2010 / 21:53

3 respostas

4

A maneira mais segura seria procurar nos logs do seu servidor FTP uma mensagem de "transferência concluída" (depende do software).

Se isso não for possível, apenas processe arquivos que não foram tocados por algum tempo seguro, digamos 10 minutos. Use find para obter uma lista desses arquivos, por exemplo por 10 minutos e seus uploads em $UPLOAD_DIR

find $UPLOAD_DIR -amin +10

O + significa "mais que". Veja man 1 find para mais informações.

    
por 28.05.2010 / 22:05
1

fuser pode fazer o truque. Isso permite que você veja quais processos estão usando um arquivo. Mova-se somente se nenhum processo estiver usando.

    
por 28.05.2010 / 23:00
0

O cron job cria um nome de processo identificável? Em caso afirmativo, use ps com grep para ver se o processo antigo ainda está em execução.

    
por 28.05.2010 / 22:15