Encontrando o pid apropriado para matar -HUP para logrotate

0

Estou aprendendo sobre as configurações do logrotate. Então, eu tenho lido a página man para comandos e olhando para logrotate configs para logs de aplicativos específicos, vejo o snipit abaixo com freqüência. (Centos 6.8 e ambientes abaixo)

postrotate
   /bin/kill -HUP 'cat /var/run/XXX.pid 2>/dev/null' 2> /dev/null || true
endscript

ou algo ao longo destas linhas. Minha pergunta é se o processo que eu preciso para kill -HUP (que não posso encontrar em kill --help ou man kill ou man signal ) não está em /var/run/xx.pid como faço para parar o processo de ainda escrever para o arquivo? Eu sei como matar um processo, mas eu só quero impedi-lo de escrever o arquivo, ou fazê-lo reler o descritor de arquivo, como o exemplo acima, ou pelo menos eu acho que é o que faz.

    
por ssvegeta96 28.12.2016 / 08:31

1 resposta

0

Saber qual PID matar é o ponto de ter um pidfile em /var/run (ou em /run/user/$UID para processos que são gerenciados por sua própria conta de usuário). Se o seu processo não gravar tal arquivo, você deverá configurá-lo para fazer isso (se possível) ou executá-lo por meio de um supervisor que cria um pidfile.

Como último recurso, você pode verificar quais processos têm o arquivo de log aberto com fuser , ou até mesmo matar esses processos imediatamente (se você fizer isso, não esqueça a opção -w , apenas para matar processos que estão gravando no arquivo), por exemplo

ps $(fuser /path/to/log/file 2>/dev/null)
fuser -w -k -HUP /path/to/log/file
    
por 29.12.2016 / 02:31