GNU/Linux >> LINUX-Kenntnisse >  >> Linux

systemd-Dienstprotokolle in eine Datei umleiten

Weiterleitung

StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log

wie hier dokumentiert:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

Beachten Sie, dass auf diese Weise der gesamte Inhalt der Protokolldatei bei jedem Neustart des Dienstes überschrieben wird.

Anhängen

Wenn Sie das Dateiprotokoll zwischen Dienstneustarts beibehalten und einfach neue protokollierte Zeilen daran anhängen möchten:

# Works only in systemd v240 and newer!
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log

Bei Systemd älter als v240 können Sie Folgendes verwenden:

ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'

exec bedeutet, dass das Shell-Programm durch my_binary ersetzt wird Programm nach dem Einrichten von Weiterleitungen ohne Fork. Es wird also keinen Unterschied zur Ausführung von my_binary geben direkt nach ExecStart= .


ExecStart=/usr/bin/nohup …

Das ist falsch. Entfernen Sie es. Dieser Dienst wird nicht in einer interaktiven Anmeldesitzung ausgeführt. Es gibt kein steuerndes Terminal oder Sitzungsleiter, der ihm überhaupt ein Auflegesignal sendet.

ExecStart=… &

Das ist falsch. Entfernen Sie es. Dies ist kein Shell-Skript. & hat keine spezielle Shell-ähnliche Bedeutung und wäre sowieso der falsche Weg, einen Dienst zu starten.

StandardOutput=/var/log/flume-ng/log1.log
StandardError=/var/log/flume-ng/log2.log

Diese sind falsch. Verwenden Sie diese nicht. systemd sendet bereits die Standardausgabe und den Fehler des/der Serviceprozesse(s) in sein Journal, ohne solche Einstellungen in der Serviceeinheit. Sie können es mit

anzeigen
journalctl -e -u flume-ng.service


Zum Protokollieren in eine Datei ohne Überschreiben (system.d Version 240+ erforderlich):

StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log

oder

StandardOutput=append:/var/log/flume-ng/log.log
StandardError=inherit

Linux
  1. Verwalten Sie den Start mit systemd

  2. Linux-Betriebssystemdienst „syslog“

  3. So leiten Sie die Telnet-Konsolenprotokolle in eine Datei um Linux

  4. Protokollrotation von stdout?

  5. Strace in Datei umleiten

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

So führen Sie Shell-Skript als Systemd-Dienst in Linux aus

Logrotate unter Linux einrichten

Protokolldateirotation

Systemprotokolle

Gibt es eine richtige Möglichkeit, Protokolle zu löschen?