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