ротация системного журнала

ротация системного журнала

Я написал небольшое приложение на языке C, которое использует интерфейс syslog C для записи сообщений (из man 3 syslog):

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

Мой вопрос: Я пишу сообщения в LOCAL0 в /var/log/local0.log. У меня также есть cron, вызывающий logrotate в /var/log/local0.log. Я заметил, что после ротации мое приложение продолжает писать в файл, который был ротирован, вместо нового /var/log/local0.log.

Как лучше всего это исправить с помощью скрипта postrotate?

  1. Просто, но не идеально: полностью перезапустите демон rsyslog.

  2. Отправлять и обрабатывать SIGHUP в моем приложении. Это кажется наиболее подходящим решением. Но я не уверен, что мне нужно делать, когда я получаю HUP. Мне просто нужно вызвать closelog(), а затем openlog()?

решение1

Еще один достойный обходной путь, который не совсем подходит вашей ситуации, но может быть использован "в крайнем случае", — это опция copytruncate в logrotate. Это означает, что то, что пишет в файл журнала, не нуждается в уведомлении.

Связанный контент