Di mana / mengapa tidak ada log untuk layanan systemd pengguna normal?

26

Saya mencoba mempelajari penggunaan systemd dasar dan saya mengalami masalah membingungkan dengan unit layanan pengguna.

Ketika menjalankan layanan biasa dengan systemctl memulai some.service, saya dapat menemukan log lengkap untuk layanan ini (termasuk apa yang telah dicetak ke stdout / stderr, seperti yang saya mengerti) dengan menjalankan sudo journalctl --unit some.service .

Pertimbangkan contoh servicefile chatty.service :

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

Ketika saya menempatkan file layanan ini di ~ / .config / systemd / user / chatty.service dan menjalankannya dengan systemctl --user start chatty.service saya tidak dapat menemukan outputnya dikirim ke stdout di journalctl, baik dengan jurnal biasa atau dengan journalctl - -pengguna . Saya hanya mendapatkan output berikut di keduanya:

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.

Dan jurnalctl --unit chatty.service tidak mengembalikan apa pun (dengan atau tanpa --user tidak ada bedanya).

Sementara jika saya memindahkan file layanan yang sama ke / etc / systemd / system dan menjalankannya dengan sudo systemd mulai chatty.service saya kemudian mendapatkan output berikut ketika saya menjalankan 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

Sepertinya unit layanan pengguna entah bagaimana tidak terintegrasi dengan baik, apakah ini diharapkan, apakah saya melewatkan sesuatu atau itu bug?

Saya menjalankan openSUSE 13.1 x86-64, dengan systemd 208 (instalasi default).

Quantumboredom
sumber
Systemd yang sama 208 di sini di Arch Linux. Anda dapat menggunakan journalctl --user --user-unit chattyuntuk mendapatkan pesan mulai / hentikan dari systemd, tetapi bukan apa yang dihasilkan oleh proses gema, setidaknya dalam kasus saya. Anda bisa mendapatkan pesan yang digaungkan dengan journalctl --useratau menggunakan beberapa filter lain.
lilydjwg

Jawaban:

20

Gunakan --user-unitopsi, dan dalam kasus Anda ...

journalctl --user-unit chatty
Elynnaie
sumber
Apakah Anda mendapatkan pesan stdout "test from chatty.service" di output log juga, atau hanya "Mulai chatty.service ..." dan "Memulai chatty.service." pesan?
Quantumboredom
Ya, saya bisa mendapatkan output dari proses juga (yaitu pesan "test from chatty.service").
elynnaie
Itulah yang saya harapkan juga, tetapi saya tidak melihatnya di sini. Bolehkah saya bertanya sistem operasi apa (dengan versi) yang Anda jalankan?
Quantumboredom
Arch Linux 3.13.7-1. systemd versi 212.
elynnaie
2
Saya melihat hasilnya di jurnalctl utama sekarang. Tetapi ketika saya mencoba berlari journalctl --usersaya mendapatkan No journal files were found.Dan journalctl --user-unit chattytidak berhasil untuk saya.
CMCDragonkai
6

Necroposting, tetapi saya menghadapi dan menyelesaikan masalah yang sama hari ini. Kemungkinan besar journalctl --user-unit chattytidak berhasil untuk Anda karena Anda menjalankannya dari root. Namun, per man journalctl, --user-unitmemfilter entri log tidak hanya oleh _SYSTEMD_USER_UNIT=, tetapi juga oleh _UID=, dan tidak ada chattylayanan dengan uid root, sehingga tidak ada entri yang ditemukan.

Kemungkinan Anda juga telah mencoba lari journalctl --user-unit chattydari pengguna biasa, tetapi berhasil No journal files were found. Hal ini terjadi karena (dan Semua pengguna diberikan akses ke jurnal pribadi per-pengguna mereka dari man journalctldapat membingungkan di sini) pada tahun 2018 pada jurnal Debian 9 saya masih tidak persisten secara default ( Storage=autodalam /etc/systemd/journald.conf, dan /var/log/journal/tidak ada), dan di non- mode persisten journaldtidak mendukung pemisahan log, sehingga semua log berakhir di satu tempat /run/log/journalmeskipun ada fakta bahwa pemisahan diaktifkan secara default - lihat SplitModedi man journald.conf. Mengaktifkan persistensi memperbaiki ini.

TL; DR: mengaktifkan persistensi dengan menempatkan Storage=persistentke /etc/systemd/journald.confdan reload journald dengan sudo systemctl restart systemd-journald.

Atau, cari dengan sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Beberapa detail lainnya ada di https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

ars
sumber
2
Terima kasih. Saya mendapatkan No journal files were opened due to insufficient permissions."petunjuk" membingungkan tentang pengaturan izin, tetapi saya tidak harus mengatur izin karena saya mencoba mengakses log pengguna, bukan log sistem. Perbaikan Anda berhasil. Terimakasih banyak.
Rolf
3

Hingga systemd v230 , Anda harus menggunakan --user-unitflag yang kurang intuitif untuk melihat log untuk unit pengguna Anda:

journalctl --user-unit chatty

Sejak systemd v230, Anda sekarang dapat menggabungkan --userdan --unitmenandai seperti yang Anda harapkan:

journalctl --user --unit chatty

The --user --unitsintaks didukung sejak Ubuntu 17.10.

Mark Stosberg
sumber
2
Saya tidak yakin fitur "--user --unit" berfungsi pada v230 ... menjalankan v232 di sini, dan fitur ini tidak berfungsi
LeGEC