GNU/Linux >> Znalost Linux >  >> Linux

Jak přesměrovat výstup služby systemd do souboru

Pokud máte novější distribuci s novějším systemd (systemd verze 236 nebo novější), můžete nastavit hodnoty StandardOutput nebo StandardErrorfile: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


Linux
  1. Spravujte spouštění pomocí systemd

  2. Jak přesměrovat výstup do souboru a Stdout v Linuxu

  3. Jak vytvořit službu Systemd v Linuxu

  1. Přesměrování a výstup potrubí?

  2. Jak přesměrovat výstup již běžícího procesu

  3. Jak přesměrovat výstup system() do souboru?

  1. Jak zastavit službu systemd

  2. Jak řeknu v servisním souboru systemd, když je USB připraveno?

  3. přesměrovat protokoly služeb systemd do souboru