rotação do syslog

2

Eu escrevi um pequeno aplicativo c que usa a interface syslog c para escrever mensagens (do man 3 syslog):

void openlog(const char *ident, int logopt, int facility);
void syslog(int priority, const char *message, ...);
void closelog(void);

Minha pergunta: estou escrevendo mensagens para LOCAL0 em /var/log/local0.log . Eu também tenho cron chamando logrotate em /var/log/local0.log . Percebi que, após a rotação, meu aplicativo continua gravando no arquivo que foi rotacionado em vez do novo /var/log/local0.log .

Qual é a melhor maneira de corrigir isso com um script postrotado?

  1. Fácil, mas não ideal: reinicie completamente o daemon rsyslog.

  2. Envie e manuseie o SIGHUP no meu aplicativo. Esta parece ser a solução mais adequada. Mas não tenho certeza do que preciso fazer quando receber o HUP. Eu só preciso chamar closelog () então openlog ()?

por Jeff Atwood 22.01.2010 / 23:02

2 respostas

3

Envie o SIGHUP para o syslogd, não para o seu programa.

    
por 22.01.2010 / 23:08
0

Outra solução decente, que não se encaixa perfeitamente na sua situação, mas pode ser usada "em apuros" é a opção copytruncate no logrotate. Isso significa que o que estiver gravando no arquivo de log não precisa ser notificado.

    
por 21.06.2010 / 01:36