De acordo com esta resposta em "Ask Ubuntu" você pode usar lsof
(lista de arquivos abertos) para verificar se o arquivo está aberto:
lsof | grep <server>/input_gate
Estou obtendo um arquivo gzip em um caminho.
Caminho da pasta de entrada:
<server>/input_gate
Eu quero verificar se o arquivo GZIP que estou recebendo nesta pasta é válido? Eu usei o seguinte comando. É bom encontrar um arquivo gzip válido ou não?
gzip -t -v <file_name>
Mas quando a mudança está acontecendo, o arquivo é mostrado como um arquivo inválido. Mas, na verdade, o arquivo é válido quando o movimento é feito. Existe alguma maneira de descobrir se o arquivo que eu recebo é um arquivo completamente movido ou movimento ainda está em andamento?
De acordo com esta resposta em "Ask Ubuntu" você pode usar lsof
(lista de arquivos abertos) para verificar se o arquivo está aberto:
lsof | grep <server>/input_gate
lsof
Para testar se algum processo tem um arquivo aberto, diga path/to/input_gate
, execute o comando:
lsof path/to/input_gate
Isso sairá com o código 0 se houver um processo usando o arquivo e o código 1 se nenhum processamento estiver usando (ou ocorreu um erro). Este código de saída pode ser usado pelos comandos do shell.
Para testar isso, vamos criar um processo para abrir nosso arquivo:
sleep 10 >>path/to/input_gate &
Isso manterá o arquivo aberto por 10 segundos. Para testar lsof
, execute rapidamente o seguinte comando:
$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
In use
Aguarde 10 segundos e tente novamente:
$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
Not in use
Se você quiser esperar até que nenhum outro processo esteja usando o arquivo:
while lsof path/to/input_gate >/dev/null; do sleep 1; done; echo "Finally, not in use"
inotifywait
Se o seu sistema suporta inotifywait
(um sistema linux deveria), então é possível procurar por eventos próximos no arquivo de interesse:
inotifywait "path/to/input_gate" -e close
O comando acima irá bloquear até que algum processo tenha fechado o arquivo.
A vantagem desta abordagem é que elimina o polling.
A desvantagem desta abordagem é que ela irá notificá-lo na primeira vez que algum processo fecha o arquivo e isso pode não ser a mesma coisa que todos os processos que fecharam o arquivo.
Tags compression gzip linux shell unix