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