Modificação do arquivo de monitor de script Bash após seu encerramento

0

Já foi perguntado aqui e encontrei a solução para a primeira parte da minha pergunta. Então, por enquanto eu tenho um script bash ( script1 ) onde eu avalio o sha1sum de um arquivo específico ( output.dat ) periodicamente (digamos a cada 1 segundo). Quando o sha1sum_cur != sha1sum_prev então eu executo outro script ( script2 ) com alguns comandos. Significado desta forma que o arquivo foi modificado.

Meu problema é que output.dat é bastante MB e demora muito para ser escrito. Então, eu não quero correr script2 enquanto os dados estão sendo escritos para ele, mas após o processo de gravação de dados para ele ter terminado. output.dat está sendo criado por um código fortran, então vamos dizer que a cada 1h ele exclui dados anteriores e grava novos, mas leva cerca de 5 minutos para isso.

duas últimas notas importantes: 1) Como estou enviando meus trabalhos para um cluster, eu não tenho permissão para instalar o inotify-tools. 2) Eu poderia chamar o script através do código fortran, uma vez que eu close(output.txt) with CALL system(./script2) mas eu prefiro não fazê-lo, desde o seu paralelo e não quer retardar a sua eficiência.

Então a questão é, o que eu poderia adicionar ao script1 para que ele entenda que o processo de gravação de dados para output.dat terminou?

    
por AlphaBeta 27.11.2014 / 12:55

1 resposta

0

Você pode usar lsof para verificar se algum processo está acessando esse arquivo. No entanto, isso não protegeria contra outro processo que alterasse o arquivo após que você verificou o acesso em seu shell script.

Para evitar condições de corrida, eu usaria operações de arquivo atômico, como mv , para marcar que seu script de shell ou outro software não "pegou" o arquivo. Esta é uma chamada do kernel e é garantida como sendo atômica (como em, se dois processos chamam mv no mesmo arquivo ao mesmo tempo, um será bem-sucedido e o outro falhará).

Outra possibilidade é usar uma ferramenta de bloqueio externa como lockfile-progs , mas aquelas que você não pode usar do software que solta o arquivo. mv é universal, embora seja uma solução indiscutivelmente suja.

    
por 16.11.2015 / 12:45