Standardmäßig hängt rsyslog Ablaufverfolgungen an eine vorhandene Protokolldatei an.
Jetzt habe ich gesehen (CentOs, Scientific Linux), dass, wenn rsyslog bereits ausgeführt wird, Sie die Protokolldatei löschen (z. B. die, die für die Protokollierung von Traces aus Ihrer Anwendung bestimmt ist), Sie dann Ihre Anwendung ausführen. Rsyslog erstellt keine Protokolldatei und es wird keine Spur aufgezeichnet.
Gibt es eine Konfigurationsoption, die rsyslog anweist, eine Protokolldatei zu erstellen, wenn diese nicht vorhanden ist, bevor Traces an die Datei angehängt werden?
Hinweis : Durch Ausführen von service rsyslog restart
wird die Erstellung einer leeren Protokolldatei erzwungen.
rsyslog.conf (nichts hinzugefügt)
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
Antworten:
In der POV von rsyslog ist die gelöschte Protokolldatei noch vorhanden. Dies liegt daran, dass rsyslog nicht in den Dateinamen schreibt, sondern in das Dateihandle, das für die Protokolldatei geöffnet ist.
Unix-Systeme löschen eine Datei erst dann, wenn Prozesse mit offenen Handles für die Datei vorhanden sind. Dies bedeutet, dass der von der gelöschten Datei belegte Speicherplatz erst freigegeben wird, wenn alle offenen Datei-Handles geschlossen sind. Dies bedeutet auch, dass Prozesse mit geöffneten Dateihandles für die gelöschte Datei weiterhin aus der Datei lesen und / oder in die Datei schreiben können.
Wenn ein HUP-Signal (z. B. über
pkill -HUP rsyslog
oder/etc/init.d/rsyslog rotate
) an rsyslog gesendet wird, wird dieses aufgefordert, alle geöffneten Dateien zu schließen, die Konfigurationsdatei neu zu laden und alle Protokolldateien zum Schreiben erneut zu öffnen (ggf. zu erstellen).Das Neustarten von rsyslogd funktioniert ebenfalls.
Beachten Sie, dass dies eine Funktion und kein Fehler ist, der einige nützliche Auswirkungen hat. Beispielsweise schreibt rsyslog auch dann in dieselbe Protokolldatei, wenn es gedreht (dh umbenannt / mv-ed) wurde, bis rsyslog ein HUP-Signal empfängt. Dies bedeutet, dass die Skripte und Dienstprogramme für die Protokollverarbeitung keine gewissenhaften zeitlichen Vorgaben haben müssen. Sie können einfach alle Protokolle drehen, rsyslog ein HUP senden und alles funktioniert weiterhin, ohne dass Protokolldaten verloren gehen.
Übrigens, die einzige Möglichkeit, dass dies mit rsyslog nicht passiert, wäre, dass jede Protokolldatei bei jedem Schreibvorgang geschlossen und erneut geöffnet (oder zumindest aufgerufen
sync()
) wird. Leistung wäre miserabel.quelle
$ FileCreateMode
Macht diese Option nicht das, was Sie wollen, $ FileCreateMode ?
Auszug
Dateiausgabemodul
In der Dokumentation zu rsyslog kann dazu das File-Argument des File Output Module verwendet werden.
Auszug Omfile-Modul
Senden Sie Syslog ein HUP-Signal
Ich denke, letztendlich müssen Sie rsyslog "auslösen", um dies zu tun. Ich denke nicht, dass es das ist, was du automatisch willst. Sie können ihm also ein HUP-Signal geben, um die Neuerstellung der Protokolldatei nach dem Löschen auszulösen.
Dabei wurden die folgenden Meldungen in meiner
/var/log/messages
Protokolldatei erstellt:quelle