Pokud máte novější distribuci s novějším systemd
(systemd
verze 236 nebo novější), můžete nastavit hodnoty StandardOutput
nebo StandardError
až file:YOUR_ABSPATH_FILENAME
.
Dlouhý příběh:
V novějších verzích systemd
existuje relativně nová možnost (požadavek na github je z roku 2016 a vylepšení je sloučeno/uzavřeno v roce 2017), kde můžete nastavit hodnoty StandardOutput
nebo StandardError
na file:YOUR_ABSPATH_FILENAME
. file:path
možnost je popsána v nejnovější systemd.exec
manuálová stránka.
Tato nová funkce je relativně nová, a proto není k dispozici pro starší distribuce, jako je centos-7 (nebo jakékoli centos před tím).
Myslím, že existuje elegantnější způsob, jak problém vyřešit:pošlete stdout/stderr na syslog s identifikátorem a instruujte svého správce syslog, aby rozdělil svůj výstup podle názvu programu.
V souboru servisní jednotky systemd použijte následující vlastnosti:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Poté, za předpokladu, že vaše distribuce používá ke správě syslogů rsyslog, vytvořte soubor v /etc/rsyslog.d/<new_file>.conf
s následujícím obsahem:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Nyní udělejte do souboru protokolu možnost zápisu pomocí syslog:
# 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
Restartujte rsyslog (sudo systemctl restart rsyslog
) a užijte si to! Váš program stdout/stderr bude stále dostupný prostřednictvím journalctl (sudo journalctl -u <your program identifier>
), ale budou také k dispozici ve vámi zvoleném souboru.
Zdroj přes archive.org