ฉันคิดว่ามีวิธีที่สวยงามกว่าในการแก้ปัญหา: ส่ง stdout / stderr ไปยัง syslog ด้วยตัวระบุและสั่งผู้จัดการ syslog ของคุณให้แยกเอาต์พุตด้วยชื่อโปรแกรม
ใช้คุณสมบัติต่อไปนี้ในไฟล์ systemd service unit ของคุณ:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
จากนั้นสมมติว่าการแจกจ่ายของคุณใช้ rsyslog เพื่อจัดการ syslogs ให้สร้างไฟล์/etc/rsyslog.d/<new_file>.conf
ด้วยเนื้อหาดังต่อไปนี้:
if $programname == '<your program identifier>' then /path/to/log/file.log
& stop
ตอนนี้ทำให้ไฟล์บันทึกสามารถเขียนได้โดย 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
รีสตาร์ท rsyslog ( sudo systemctl restart rsyslog
) และสนุกได้เลย! โปรแกรม stdout / stderr ของคุณจะยังคงใช้งานได้ผ่าน journalctl ( sudo journalctl -u <your program identifier>
) แต่จะสามารถใช้งานได้ในไฟล์ที่คุณเลือก
แหล่งที่มาผ่าน archive.org
journalctl -u
ยังคงใช้งานได้ แต่ไม่มีอะไรถูกส่งไปยังไฟล์ที่ระบุ