Seu arquivo não está corrompido; Nos sistemas Linux e POSIX, desde que um processo em execução tenha um descritor de arquivos aberto em algum arquivo que esteja sendo escrito, poderá continuar a escrevê-lo, mesmo se você remover ou renomear esse arquivo (porque um descritor de arquivo está relacionado a um i-node , não para um nome de arquivo). em particular logrotate
ou logadm
- ou qualquer sequência de comandos externos - não fará nada útil sobre o espaço em disco.
Estou assumindo que você está no Linux.
Se o seu processo tiver pid 1234, você poderá procurar em /proc/1234/
, em particular, listar o diretório /proc/1234/fd/
. Leia proc (5) .
Provavelmente, você deve interromper o processo ofensivo (usando kill -TERM
, em seguida, kill -QUIT
, e, por fim, kill -KILL
; consulte sinal (7) e matar (1) ), em seguida, remova o arquivo e, finalmente, corrija e / ou configure seu programa para fazer alguns logs mais úteis e inicie-o novamente.
Você provavelmente perdeu todo o cálculo feito pelo seu programa. Então, melhor pará-lo o quanto antes, melhorá-lo (talvez você queira algum ponto de verificação do aplicativo , ou persistence , ou adicione uma maneira de fechar, renomeie e reabra o arquivo de log), e reinicie uma versão melhorada do seu programa.
Você deve ler Programação avançada em Linux . Você provavelmente tem vários bugs no seu programa (talvez relacionados ao registro). Você pode usar strace (1) para entender o syscalls feito pelo seu processo, e você pode usar syslog (3) dentro do seu programa (melhorado).
Muito provavelmente, você tem um bug no seu programa. Então, pare melhor agora, pense, melhore e comece de novo. Esperar que o disco seja totalmente preenchido não o ajudará (e isso tornaria o problema ainda pior).
Para testes futuros, você pode considerar a definição de algumas cotas de disco e / ou alguns limites de recursos (por exemplo, setrlimit(2) e o bash ulimit
builtin).
No futuro, sempre projete seu programa para poder reciclar o processo. Não ser capaz de suportar isso é sempre um grande erro (em particular, você precisa de alguma estratégia de backup, e você precisa de algum controle de revisão no seu código-fonte, eu recomendo git para isso.