Se hai una distribuzione più recente con un systemd
più recente (systemd
versione 236 o successiva), puoi impostare i valori di StandardOutput
o StandardError
a file:YOUR_ABSPATH_FILENAME
.
Storia lunga:
Nelle versioni più recenti di systemd
c'è un'opzione relativamente nuova (la richiesta github è del 2016 ish e il miglioramento è unito/chiuso 2017 ish) dove puoi impostare i valori di StandardOutput
o StandardError
a file:YOUR_ABSPATH_FILENAME
. Il file:path
opzione è documentata nel più recente systemd.exec
pagina man.
Questa nuova funzionalità è relativamente nuova e quindi non è disponibile per le distribuzioni precedenti come centos-7 (o qualsiasi centos precedente).
Penso che ci sia un modo più elegante per risolvere il problema:inviare stdout/stderr a syslog con un identificatore e istruire il gestore syslog a suddividere l'output in base al nome del programma.
Utilizza le seguenti proprietà nel file dell'unità di servizio systemd:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Quindi, supponendo che la tua distribuzione utilizzi rsyslog per gestire i syslog, crea un file in /etc/rsyslog.d/<new_file>.conf
con il seguente contenuto:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Ora rendi il file di log scrivibile da 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
Riavvia rsyslog (sudo systemctl restart rsyslog
) e goditelo! Il tuo programma stdout/stderr sarà ancora disponibile tramite journalctl (sudo journalctl -u <your program identifier>
) ma saranno disponibili anche nel tuo file preferito.
Fonte tramite archive.org