(संपादित करें: syslog के साथ प्रारंभिक भ्रम से बचने के लिए पुनर्प्राप्त किया गया प्रश्न)
थोड़ा विचित्र प्रणालीगत व्यवहार, जिसे मैं या तो बग, दस्तावेज़ीकरण विफलता या PEBCAK के रूप में पुष्टि करना चाहता हूं।
जड़ के रूप में चलने वाली एक बहुत ही सरल इकाई पर विचार करें:
# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=root
EOF
# systemctl daemon-reload
के साथ User=root
(या User
अनिर्दिष्ट) stdout इकाई के रूप में टैग की गई पत्रिका में जाता है, जैसा कि कोई उम्मीद करेगा:
# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com echo[13479]: Hello world
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.
जब कोई सेवा किसी भी गैर-रूट उपयोगकर्ता के रूप में चलाई जाती है, उदाहरण के लिए nobody
, stdout को इकाई के रूप में टैग नहीं किया जाता है, और यदि आप journalctl
साथ चलते हैं तो यह प्रकट नहीं होगा -u
:
# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=nobody
EOF
# systemctl daemon-reload
# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.
वास्तव में stdout जर्नल में जा रहा है, लेकिन कोई _SYSTEMD_UNIT टैग नहीं है। स्टडआउट को छोड़ कर देखा जा सकता है -u testunit
:
# journalctl -f &
systemctl start testecho
# systemctl start testecho
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com echo[13719]: Hello world
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.
इसे चलाकर भी पुष्टि की जा सकती है journalctl -o json-pretty -f
। जब User=
गैर-रूट होता है, तो कोई "_SYSTEMD_UNIT" : "testecho.service"
फ़ील्ड नहीं होता है ।
StandardOutput पर डॉक्स = जादुई वर्जन के आधार पर कुछ नहीं कहते हैं User
, और न ही उपयोगकर्ता के लिए डॉक्स = । वे सभी कहते हैं कि StandardOutput
विरासत में मिला है DefaultStandardOutput
, और चूक journal
।
क्या मैं कुछ भूल रहा हूँ? मैं ध्यान देता हूं कि मेरी सेवा का स्टडआउट हमेशा चाहे जो भी हो, syslog में चला जाता हैUser
मैंने इसे Ubuntu 22.04 और 16.10 पर क्रमशः 229 और 231 सिस्टमड पर देखा है।
धन्यवाद!
logger
और systemd-cat
?
User=nobody
(या किसी भी गैर-रूट उपयोगकर्ता) निर्दिष्ट किया जाता है, संदेश (इकाई से संबंधित के रूप में चिह्नित नहीं किया गया है testecho
उदाहरण में)। तो संदेश के साथ देखा जा सकता है, journalctl -f
लेकिन नहीं journalctl -u testecho -f
। टैग की कमी को चलाने के journalctl -o json-pretty
साथ देखा जा सकता है - साथ User=root
या User=
छोड़ा गया, किसी को "_SYSTEMD_UNIT": "testecho.service"
टैग मिल जाता है , लेकिन कोई टैग नहीं User=nobody
। किसी को पता है कि यह क्यों हो सकता है?
_SYSTEMD_UNIT
पदनाम केवल सिस्टम सेवाओं के लिए उपयोग किया जाता है? यदि आप User=
घोषणा को छोड़ देते हैं और सेवा को अपने सामान्य उपयोगकर्ता के रूप में चलाते हैं ( systemd --user
) तो क्या इसका समान प्रभाव पड़ता है?
nobody
पत्रिका में लिखने से रोका जा रहा है। क्या आपको वास्तविक उपयोगकर्ता के साथ एक ही मुद्दा मिलता है? ...systemd-journal
समूह में वास्तविक उपयोगकर्ता (या समान) के साथ?