อยู่ที่ไหน / ทำไมไม่มีบันทึกสำหรับผู้ใช้บริการ systemd ปกติ?


26

ฉันกำลังพยายามเรียนรู้การใช้งานพื้นฐาน systemd และฉันประสบปัญหาสับสนกับหน่วยบริการผู้ใช้

เมื่อเรียกใช้บริการธรรมดาที่มีsystemctl เริ่มต้นบริการบางอย่างฉันสามารถค้นหาบันทึกเต็มรูปแบบสำหรับบริการนี้ (รวมถึงสิ่งที่พิมพ์ไปยัง stdout / stderr ตามที่ฉันเข้าใจ) โดยใช้sudo journalctl - รวมเอาบางบริการ

พิจารณาตัวอย่าง servicefile chatty.service :

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"

เมื่อฉันวางไฟล์เซอร์วิสนี้ใน~ / .config / systemd / user / chatty.serviceและรันด้วยsystemctl --user start chatty.serviceฉันไม่พบเอาต์พุตที่ส่งไปยัง stdout ใน journalctl ไม่ว่าจะเป็นjournalctlธรรมดาหรือกับjournalctl - ของผู้ใช้ ฉันจะได้รับผลลัพธ์ต่อไปนี้ทั้งคู่:

Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.

และjournalctl --unit chatty.serviceจะไม่ส่งคืนสิ่งใดเลย (ไม่ว่าจะมีหรือไม่มี - ผู้ใช้ก็ไม่ได้ทำให้แตกต่าง)

ในขณะที่ถ้าฉันย้ายไฟล์เซอร์วิสเดียวกันไปที่/ etc / systemd / systemและรันด้วยsudo systemd start chatty.serviceฉันจะได้ผลลัพธ์ต่อไปนี้เมื่อฉันรันsudo journalctl --unit chatty.service :

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.
Jan 15 19:28:08 qbd-x230-suse.site echo[27098]: test from chatty.service

ดูเหมือนว่าหน่วยบริการผู้ใช้จะไม่ได้รับการบูรณาการอย่างใดอย่างนี้เป็นสิ่งที่คาดหวังฉันขาดอะไรบางอย่างหรือเป็นข้อผิดพลาดหรือไม่?

ฉันใช้ openSUSE 13.1 x86-64, กับ systemd 208 (ติดตั้งเป็นค่าเริ่มต้น)


ระบบเดียวกัน 208 บน Arch Linux คุณสามารถใช้journalctl --user --user-unit chattyเพื่อรับข้อความเริ่มต้น / หยุดเหล่านั้นจาก systemd แต่ไม่ใช่สิ่งที่กระบวนการ echo ประมวลผลอย่างน้อยในกรณีของฉัน คุณสามารถรับข้อความที่สะท้อนด้วยjournalctl --userหรือใช้ตัวกรองอื่น ๆ
lilydjwg

คำตอบ:


20

ใช้--user-unitตัวเลือกและในกรณีของคุณ ...

journalctl --user-unit chatty

คุณได้รับข้อความ "การทดสอบจาก chatty.service" ในเอาต์พุตของล็อกเช่นกันหรือเพียงแค่ "กำลังเริ่มต้น chatty.service ... " และ "เริ่มต้น chatty.service" ข้อความ?
Quantumboredom

ใช่ฉันสามารถรับผลลัพธ์จากกระบวนการได้เช่นกัน (เช่นข้อความ "ทดสอบจาก chatty.service")
elynnaie

นั่นคือสิ่งที่ฉันคาดหวังเช่นกัน แต่ฉันไม่เห็นที่นี่ ฉันขอถามว่าคุณใช้ระบบปฏิบัติการรุ่นใด
Quantumboredom

Arch Linux 3.13.7-1 systemd เวอร์ชั่น 212.
elynnaie

2
ฉันเห็นผลลัพธ์ใน journalctl หลักตอนนี้ แต่เมื่อฉันลองวิ่งjournalctl --userฉันจะได้No journal files were found.และสิ่งjournalctl --user-unit chattyนั้นก็ไม่ได้ผลสำหรับฉัน
CMCDragonkai

6

การทำลายระบบนิเวศ แต่ฉันต้องเผชิญและแก้ไขปัญหาเดียวกันในวันนี้ ส่วนใหญ่อาจjournalctl --user-unit chattyไม่ทำงานสำหรับคุณเพราะคุณเรียกใช้จากราก อย่างไรก็ตามต่อman journalctl, --user-unitฟิลเตอร์บันทึกรายการโดยไม่เพียง_SYSTEMD_USER_UNIT=แต่ยังตาม_UID=และไม่มีchattyบริการกับ uid รากจึงไม่มีรายการที่พบ

ก็เป็นไปได้ว่าคุณยังมีความพยายามที่จะเรียกใช้journalctl --user-unit chattyจากผู้ใช้ตามปกติ No journal files were foundแต่มี สิ่งนี้เกิดขึ้นเพราะ (และผู้ใช้ทั้งหมดได้รับสิทธิ์เข้าถึงวารสารส่วนตัวต่อผู้ใช้ของพวกเขาจากman journalctlอาจทำให้เกิดความสับสนที่นี่) ในปี 2018 ใน Debian 9 journalctl ของฉันยังคงไม่ถาวรตามค่าเริ่มต้น ( Storage=autoใน/etc/systemd/journald.confและ/var/log/journal/ไม่มีอยู่) และใน โหมดถาวรjournaldไม่สนับสนุนการบันทึกแยกจึงบันทึกทั้งหมดจบลงในสถานที่เดียวใน/run/log/journalแม้จะมีความจริงที่ว่าแยกเปิดอยู่โดยเริ่มต้น - ดูในSplitMode man journald.confการเปิดใช้งานความพยายามแก้ไขปัญหานี้

TL; DR: เปิดใช้งานความยั่งยืนโดยการใส่Storage=persistentไป/etc/systemd/journald.confและโหลด journald sudo systemctl restart systemd-journaldกับ

หรือค้นหาด้วย sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

รายละเอียดเพิ่มเติมบางส่วนอยู่ที่ https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html


2
ขอขอบคุณ. ฉันได้รับNo journal files were opened due to insufficient permissions."คำแนะนำ" ที่สับสนเกี่ยวกับการตั้งค่าการอนุญาต แต่ฉันไม่ควรต้องตั้งค่าการอนุญาตเพราะฉันพยายามเข้าถึงบันทึกของผู้ใช้ไม่ใช่บันทึกของระบบ การแก้ไขของคุณทำงาน ขอบคุณมาก.
Rolf

3

จนกระทั่ง systemd v230คุณต้องใช้การ--user-unitตั้งค่าสถานะที่ใช้งานง่ายเพื่อดูบันทึกสำหรับหน่วยผู้ใช้ของคุณ:

journalctl --user-unit chatty

ตั้งแต่ systemd v230 ตอนนี้คุณสามารถรวม--userและตั้ง--unitค่าสถานะตามที่คุณคาดหวัง:

journalctl --user --unit chatty

--user --unitไวยากรณ์ได้รับการสนับสนุนตั้งแต่ Ubuntu 17.10


2
ฉันไม่แน่ใจว่าคุณลักษณะ "--user --unit" ใช้งานได้กับ v230 ... ใช้งาน v232 ที่นี่และคุณลักษณะนี้ใช้งานไม่ได้
LeGEC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.