rotação de syslog

rotação de syslog

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?

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

  2. 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.

informação relacionada