Saya pikir ada cara yang lebih elegan untuk menyelesaikan masalah: mengirim stdout / stderr ke syslog dengan pengenal dan memerintahkan manajer syslog Anda untuk membagi hasilnya dengan nama program.
Gunakan properti berikut di file unit layanan systemd Anda:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
Kemudian, dengan anggapan distribusi Anda menggunakan rsyslog untuk mengelola syslog, buat file /etc/rsyslog.d/<new_file>.conf
dengan konten berikut:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
Sekarang buat file log dapat ditulis oleh 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
Mulai ulang rsyslog ( sudo systemctl restart rsyslog
) dan selamat menikmati! Program Anda stdout / stderr masih akan tersedia melalui journalctl ( sudo journalctl -u <your program identifier>
) tetapi mereka juga akan tersedia di file pilihan Anda.
Sumber melalui archive.org
journalctl -u
masih berfungsi tetapi tidak ada yang dikirim ke file yang ditentukan.