Назад | Перейти на главную страницу

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

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

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 ()?

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