मुझे लगता है कि समस्या को हल करने के लिए एक और अधिक सुंदर तरीका है: एक पहचानकर्ता के साथ syslog को stdout / stderr भेजें और अपने syslog प्रबंधक को प्रोग्राम नाम से इसका आउटपुट विभाजित करने का निर्देश दें।
अपनी systemd सेवा इकाई फ़ाइल में निम्नलिखित गुणों का उपयोग करें:
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=<your program identifier> # without any quote
फिर, मान लें कि आपका वितरण syslogs को प्रबंधित करने के लिए rsyslog का उपयोग कर रहा है, /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>
) के माध्यम से उपलब्ध होगा, लेकिन वे आपकी पसंद की फ़ाइल में भी उपलब्ध होंगे।
आर्काइव.ऑर्ग के माध्यम से स्रोत
journalctl -u
अभी भी काम करता है लेकिन निर्दिष्ट फ़ाइल को कुछ भी नहीं भेजा जाता है।