Eu acabei de tentar e ver qual é o principal problema aqui.
Se eu fizer um tail -f em um arquivo existente e, em seguida, remover o arquivo, tail não notará isso. A reson é simples: tail -f abre um identificador de arquivo somente leitura que referencia o conteúdo do arquivo. Agora, se o arquivo desaparecer, apenas a entrada do meta-diretório desaparecerá. A alocação será liberada, quando o último FH for fechado - o que é tail neste caso.
Então você precisa
- coloque
tail -fem um processo em segundo plano próprio, lembre-se de seu PID. - Iniciar outro processo que monitora a existência do arquivo (em um loop while a cada segundo ou algo parecido)
- Se esse monitor perceber que o arquivo foi removido, ele deverá sinalizar o PID do processo final correspondente - com um sinal de sua escolha - você pode usar
trapno processo final.