Syslog-Rotation

Syslog-Rotation

Ich habe eine kleine C-Anwendung geschrieben, die die Syslog-C-Schnittstelle zum Schreiben von Nachrichten verwendet (von man 3 syslog):

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

Meine Frage: Ich schreibe Nachrichten an LOCAL0 in /var/log/local0.log. Außerdem habe ich einen Cron, der logrotate aufruft /var/log/local0.log. Mir ist aufgefallen, dass meine App nach der Rotation weiterhin in die Datei schreibt, die herausrotiert wurde, statt in die neue /var/log/local0.log.

Wie kann dies am besten mit einem Postrotate-Skript behoben werden?

  1. Einfach, aber nicht ideal: Starten Sie den rsyslog-Daemon vollständig neu.

  2. Senden und verarbeiten Sie SIGHUP in meiner App. Dies scheint die am besten geeignete Lösung zu sein. Aber ich bin nicht sicher, was ich tun muss, wenn ich das HUP erhalte. Muss ich nur closelog() und dann openlog() aufrufen?

Antwort1

Ein weiterer guter Workaround, der nicht ganz zu Ihrer Situation passt, aber „zur Not“ verwendet werden kann, ist die Option „copytruncate“ in logrotate. Dies bedeutet, dass alles, was in die Protokolldatei geschrieben wird, nicht benachrichtigt werden muss.

verwandte Informationen