Envie o SIGHUP
para o syslogd, não para o seu programa.
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?
Fácil, mas não ideal: reinicie completamente o daemon rsyslog.
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 ()?
Envie o SIGHUP
para o syslogd, não para o seu programa.
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.