Bash anexado ao arquivo, removido durante a execução. Isso pode ser corrigido?

3

Acabei de perceber que algo estúpido (meu lado) aconteceu. Atualmente, estou executando vários programas em várias máquinas ao anexar sua saída.

Por exemplo machine01 está em execução "./calc 1 > > calc_one.txt", machine02 está executando "./calc 2 > > calc_two.txt" etc.

Esses cálculos são longos e acabei de descobrir que algo chato aconteceu. Estou usando o git e estava executando esses programas em várias máquinas. Eu escrevi um novo modo do meu programa e liguei para executá-lo em machine03.

Como estou usando o git, concluí que foi salvo para remover os arquivos .txt no diretório.

Acabei de perceber que as máquinas compartilham um diretório. Então, eu removi "calc_one.txt" e "calc_two.txt", ao qual a saída está sendo anexada.

Agora, os programas são de tal forma que eles só imprimem a saída no fim . No programa há um grande número de threads (OMP) e estes geram resultados (vetor C ++) que são impressos depois que todos os threads terminam.

Como tal, o fluxo ainda está chegando. Mas uma experiência com o BASH e "sleep" indica que a substituição do arquivo .txt não o fará anexar ao novo arquivo. Há algo que eu possa fazer ou fazer? Preciso começar essas simulações do zero?

Meus sinceros agradecimentos por sua ajuda, Daimonie

PS: O sistema é fedora. Eu não tenho privilégios administrativos.

    
por Daimonie 02.01.2016 / 00:23

1 resposta

2

1. Obtenha o PID do processo. Por exemplo:

pgrep calc

2. Encontre arquivos apagados. Por exemplo:

find /proc/12345/fd -ls | grep '(deleted)'
# or (no pid)
lsof | grep calc_one.txt
# ...
lsof -p 12345

3. a) Copie o arquivo, (do resultado anterior, aqui 3 ). Um instantâneo:

cp /proc/12345/fd/3 mycopy1.txt

3. b) Novo arquivo anexado:

tail -c +0 -f /proc/12345/fd/3 > mycopy2.txt

Onde:

-c +K , bytes de saída que começam com o Kth. Como queremos arquivo inteiro, dizemos +0
-f    , Siga. Saída de dados anexados conforme o arquivo cresce.

    
por 02.01.2016 / 01:32