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 formato /var/log/local0.log
. Eu também tenho o 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 arquivo /var/log/local0.log
.
Qual é a melhor maneira de corrigir isso com um script postrotate?
Fácil, mas não ideal: reinicie completamente o daemon rsyslog.
Envie e manipule 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. Preciso apenas chamar closelog() e depois openlog()?
Responder1
Outra solução alternativa decente, que não se adapta perfeitamente à sua situação, mas pode ser usada "em apuros", é a opção copytruncate no logrotate. Isso significa que tudo o que está sendo gravado no arquivo de log não precisa ser notificado.