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

So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

Wenn Sie eine neuere Distribution mit einem neueren systemd haben (systemd Version 236 oder neuer), können Sie die Werte von StandardOutput setzen oder StandardError bis file:YOUR_ABSPATH_FILENAME .

Lange Geschichte:

In neueren Versionen von systemd Es gibt eine relativ neue Option (die Github-Anforderung stammt von 2016 ish und die Erweiterung wurde 2017 ish zusammengeführt/geschlossen), mit der Sie die Werte von StandardOutput festlegen können oder StandardError bis file:YOUR_ABSPATH_FILENAME . Die file:path Option ist im neuesten systemd.exec dokumentiert Manpage.

Diese neue Funktion ist relativ neu und steht daher für ältere Distributionen wie Centos-7 (oder Centos davor) nicht zur Verfügung.


Ich denke, es gibt einen eleganteren Weg, das Problem zu lösen:Senden Sie die stdout/stderr mit einer Kennung an syslog und weisen Sie Ihren syslog-Manager an, seine Ausgabe nach Programmnamen aufzuteilen.

Verwenden Sie die folgenden Eigenschaften in Ihrer systemd-Service-Unit-Datei:

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote

Angenommen, Ihre Distribution verwendet rsyslog zum Verwalten von Syslogs, erstellen Sie dann eine Datei in /etc/rsyslog.d/<new_file>.conf mit folgendem Inhalt:

if $programname == '<your program identifier>' then /path/to/log/file.log
& stop

Machen Sie nun die Protokolldatei für Syslog beschreibbar:

# ls -alth /var/log/syslog 
-rw-r----- 1 syslog adm 439K Mar  5 19:35 /var/log/syslog
# chown syslog:adm /path/to/log/file.log

Starten Sie rsyslog neu (sudo systemctl restart rsyslog ) und genieße! Ihr Programm stdout/stderr ist weiterhin über journalctl verfügbar (sudo journalctl -u <your program identifier> ), aber sie sind auch in der Datei Ihrer Wahl verfügbar.

Quelle über archive.org


Linux
  1. So erstellen Sie einen Systemd-Dienst unter Linux

  2. So leiten Sie die Ausgabe in eine Datei und stdout um

  3. So leiten Sie die Ausgabe eines bereits laufenden Prozesses um

  4. Wie verwendet man Systemd, um einen Dienst neu zu starten, wenn er ausgefallen ist?

  5. Wie stoppen Sie den systemd-Dienst

So speichern Sie die Befehlsausgabe in einer Datei unter Linux

So leiten Sie stderr in Bash auf stdout um

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

So leiten Sie die Shell-Befehlsausgabe um

Wie sage ich in der systemd-Dienstdatei, dass USB bereit ist?

systemd-Dienstprotokolle in eine Datei umleiten