Jika Anda memiliki distro yang lebih baru dengan systemd yang lebih baru (systemd versi 236 atau lebih baru), Anda dapat menyetel nilai StandardOutput atau StandardError ke file:YOUR_ABSPATH_FILENAME .
Cerita panjang:
Di versi systemd yang lebih baru ada opsi yang relatif baru (permintaan github berasal dari 2016 ish dan peningkatannya digabungkan/ditutup 2017 ish) di mana Anda dapat mengatur nilai StandardOutput atau StandardError ke file:YOUR_ABSPATH_FILENAME . file:path opsi didokumentasikan dalam systemd.exec terbaru halaman manual.
Fitur baru ini relatif baru sehingga tidak tersedia untuk distro lama seperti centos-7 (atau centos apa pun sebelumnya).
Saya pikir ada cara yang lebih elegan untuk menyelesaikan masalah:kirim stdout/stderr ke syslog dengan pengenal dan perintahkan manajer syslog Anda untuk membagi keluarannya 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 asumsi distribusi Anda menggunakan rsyslog untuk mengelola syslog, buat file di /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 nikmati! Stdout/stderr program Anda akan tetap tersedia melalui journalctl (sudo journalctl -u <your program identifier> ) tetapi juga akan tersedia di file pilihan Anda.
Sumber melalui archive.org