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