सिस्टम बग? गैर-रूट उपयोगकर्ता = निर्दिष्ट किए जाने पर Stdout को इकाई से संबंधित टैग नहीं किया जाता है


0

(संपादित करें: 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 सिस्टमड पर देखा है।

धन्यवाद!


मुझे संदेह है कि कुछ अनुमतियों को nobodyपत्रिका में लिखने से रोका जा रहा है। क्या आपको वास्तविक उपयोगकर्ता के साथ एक ही मुद्दा मिलता है? ... systemd-journalसमूह में वास्तविक उपयोगकर्ता (या समान) के साथ?
क्विक्सोटिक

आप के साथ एक ही परिणाम मिलता है loggerऔर systemd-cat?
grawity

@quixotic, यह किसी भी गैर-रूट उपयोगकर्ता के साथ होता है, सिस्टमड-जर्नल समूह में या नहीं।
जेफ टर्नर

एक अद्यतन: मैं पाया है कि stdout है वास्तव में पत्रिका के लिए लॉग किया है, लेकिन जब 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) तो क्या इसका समान प्रभाव पड़ता है?
क्विक्सोटिक

जवाबों:


1

यह एक ज्ञात मुद्दे की तरह लगता है कि वर्तमान में ठीक करने की योजना नहीं है। देख:


1
पुष्टि हुई, धन्यवाद! अगर मैं बदल ExecStart=/bin/echo 'Hello world'जाता ExecStart=/bin/bash -c "/bin/echo 'Hello world'; sleep 0.1"हूं, तो भी मुझे टैग किए गए आउटपुट मिलते हैं User=nobody
जेफ टर्नर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.