Não há resposta simples para isso, as coisas que você tem disponíveis são estas:
Inotify
Você pode usar inotify
para ser notificado sempre que algo alterar um arquivo. inotify
em si não é um utilitário, é uma interface fornecida pelo kernel do Linux, mas existem utilitários como por exemplo inotifywait
do pacote inotify-tools
.
O problema com inotify
é que ele não informa qual processo modificou o arquivo.
Exemplo:
mst@mst-nb1:~$ inotifywait 123
Setting up watches.
Watches established. # now i write to "123" in another terminal
123 MODIFY
lsof
Um utilitário realmente excelente para descobrir qual processo mantém um arquivo aberto é lsof
. Por exemplo, fazendo lsof /var/log/syslog
você pode ver quais processos atualmente mantêm esse arquivo aberto.
O problema com lsof
é que ele não pode monitorar esse arquivo ao longo de um período de tempo, ele só pode fornecer um instantâneo da situação no momento em que você o executa. No seu caso, você quer saber o que está sendo escrito nesse arquivo, mas não sabe ao certo se esse arquivo está permanentemente aberto (provavelmente não é). Caso o processo de escrita não mantenha o arquivo aberto o tempo todo, então lsof
não o ajudará muito, porque ele só poderia apontar o processo certo se você executá-lo exatamente no momento em que estiver escrevendo.
O motivo pelo qual lsof
não pode monitorar o arquivo foi o mesmo que inotify
porque obtém suas informações simplesmente varrendo o sistema de arquivos /proc
, mas ele não configura nenhum observador.
Exemplo:
# Terminal 1 (I open the file)
mst@mst-nb1:~$ cat > 123
# Terminal 2
mst@mst-nb1:~$ lsof 123
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cat 24097 mst 1w REG 252,1 0 16791997 123
loggedfs
Esta pode ser sua melhor chance, mas é preciso um certo esforço para que ela funcione. Você pode usar loggedfs
do fusível e montá-lo no diretório onde seu arquivo de log reside. Em seguida, ele deve fornecer informações detalhadas sobre o que está abrindo um arquivo e quando.
O único problema com loggedfs
é que ele não é tão fácil de usar quanto algum utilitário simples de linha de comando.
Se você quiser passar pelo incômodo com loggedfs
, consulte a documentação
Conclusão
A conclusão é que você tem várias possibilidades, mas não há simple
way.