Saya memiliki layanan (yang ditulis oleh saya sendiri) yang berjalan di server Debian (Jessie), dan log layanan itu sendiri menunjukkan bahwa ia memulai kembali pada waktu tertentu. Tidak ada indikasi segfault atau crash lainnya, jadi saya sekarang mencoba mencari tahu apakah aplikasi tersebut gagal dan diam-diam direspon oleh systemd, atau apakah pengguna dengan sengaja memulai kembali layanan melalui systemctl
.
Sejarah shell tidak menunjukkan aktivitas seperti itu, tetapi itu tidak konklusif karena export HISTCONTROL=ignoreboth
dan karena sesi SSH mungkin baru saja kehabisan waktu, mencegah riwayat bash login sebelumnya tidak ditulis ke disk. Server tidak di-reboot pada saat itu.
Tetapi saya berharap bahwa systemd itu sendiri harus menyimpan log yang menunjukkan kapan suatu layanan sengaja dimulai kembali. Yang mengejutkan saya, saya tidak dapat menemukan dokumentasi (misalnya untuk journalctl
) tentang cara mendapatkan log tersebut.
Beberapa posting lain (mis. Di mana / mengapa tidak ada log untuk layanan systemd pengguna normal? ) Tampaknya menunjukkan bahwa harus ada pesan log seperti ini:
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.
Tapi saya tidak melihat pesan log seperti itu di sistem saya.
Apakah ada cara untuk mengetahui kapan layanan systemd dimulai, dihentikan atau dimulai kembali?
Sunting : Tampaknya masalah khas yang mungkin dialami orang adalah bahwa mereka dijalankan journalctl
sebagai pengguna yang tidak memiliki hak istimewa. Ini tidak terjadi pada saya, saya telah beroperasi root
sepanjang waktu. Menanggapi komentar, menjalankan grep systemd /var/log/syslog
hanya memberi saya ini:
Jun 6 09:28:35 server systemd[22057]: Starting Paths.
Jun 6 09:28:35 server systemd[22057]: Reached target Paths.
Jun 6 09:28:35 server systemd[22057]: Starting Timers.
Jun 6 09:28:35 server systemd[22057]: Reached target Timers.
Jun 6 09:28:35 server systemd[22057]: Starting Sockets.
Jun 6 09:28:35 server systemd[22057]: Reached target Sockets.
Jun 6 09:28:35 server systemd[22057]: Starting Basic System.
Jun 6 09:28:35 server systemd[22057]: Reached target Basic System.
Jun 6 09:28:35 server systemd[22057]: Starting Default.
Jun 6 09:28:35 server systemd[22057]: Reached target Default.
Jun 6 09:28:35 server systemd[22057]: Startup finished in 59ms.
Jun 6 09:37:08 server systemd[1]: Reexecuting.
sumber
grep systemd /var/log/syslog
Stopped target Default
,Starting Shutdown
dll. Tidak ada yang menunjukkan apa pun tentang layanan individual. Mungkin itu hanya masalah konfigurasi? Catatan saya di Debian Jessie dalam kasus khusus ini./etc/systemd/journald.conf
apakah Anda belum menggantiMaxLevelStore
atauMaxLevelSyslog
, dan lihat di semua tempat lain yang dapat Anda konfigurasikan journald sebagaimana tercantum dalamman journald.conf
./etc/systemd
pada dasarnya kosong (semua opsi dikomentari, termasuk yang Anda sebutkan).Jawaban:
Jika Anda perlu skrip ini, Anda harus melihat ke dalam menggunakan
systemctl show
perintah. Ini lebih berguna untuk skrip daripada mencoba mem-parsing apa pun daristatus
. Misalnya, untuk mengetahui kapan layanan terakhir dimulai, Anda dapat menggunakan:Jika Anda ingin melihat semua properti yang tersedia cukup abaikan bendera dan semuanya akan dibuang.
Dokumentasi untuk properti ini dapat ditemukan di sini .
sumber
StatusErrno
danResult
? Saya akan bertanya-tanya apakah itu berubah jika layanan gagal atau dimulai kembali. Jika Anda benar-benar perlu melangkah lebih jauh, cobalah menambahkanExecStopPost
langkah di mana Anda menyentuh file dan memperbarui cap waktu saat shutdown. Itu akan membantu Anda membedakan antara restart diam dan yang bertujuan.Dengan konfigurasi default pada Debian, pengguna yang tidak berhak tidak akan memiliki akses ke systemd-journald, atau log syslog. Jika masuk sebagai pengguna normal, Anda akan menerima respons ini dari journalctl:
yang agak membingungkan.
Jika Anda login sebagai root,
journalctl --unit=yourservice
harus memberi Anda informasi yang Anda cari. Setelahsystemctl restart bind9
di server saya, saya mendapatkan ini setelahjournalctl --unit=bind9
:Jika saya membunuh bind9 secara eksplisit dengan
kill -9
,journalctl --unit=bind9
berikan:Baris pertama menunjukkan bahwa proses mati karena terbunuh.
systemd-journald juga meneruskan semua pesan log ke syslog, jadi Anda juga harus menemukan pesan-pesan ini di
/var/log/syslog
.Systemd dan systemd-journald memiliki default yang dikompilasi dalam konfigurasi yang dapat diubah di
/etc/systemd/system.conf
dan/etc/systemd/journald.conf
.Ini mungkin berguna untuk mengetahui bahwa per default, systemd-journald toko log di bawah
/run
, yangtmpfs
, dan karena itu menghilang setelah reboot. Ini berarti bahwa untuk mendapatkan pesan log yang lebih lama dari boot terakhir, Anda harus melihat file syslog. Dalam hal ini, journalctl tidak akan memberi Anda log yang lebih lama dari boot terakhir. Ini dapat diubah/etc/systemd/journald.conf
dengan pengaturanStorage=persistent
.Halaman manual yang mendokumentasikan ini adalah:
Juga perhatikan bahwa agar layanan dapat dimulai ulang secara otomatis oleh systemd, ini harus dikonfigurasi dalam
.service
file itu. Dariman 5 systemd.service
:sumber
systemd
saat mengeluarkan jurnal seperti yang Anda gambarkan, meskipun saya telah bekerja sebagai root sepanjang waktu./var/log/syslog
juga tidak menunjukkan apa-apa. Omong-omong, ini systemd 215.Anda dapat melihat kapan layanan Anda terakhir kali dimulai atau dimulai kembali. Gunakan
service chatty status
atausystemctl status chatty
. Berikut adalah contoh untuk layanan apache2 atau httpd:baris
Active: active (running) since Wen. 2017-06-02 15:53:01 CEST; 21min ago
menunjukkan sejak bagaimana layanan ini berjalan tetapi saya tidak tahu apakah Anda dapat menampilkan seperti 'daftar' persis apa yang Anda cari.sumber
service
adalah perintah pemula baru yang bekerja dengan systemd untuk kompatibilitas.systemd
Perintah asli adalahsystemctl status apache2
.Kita dapat menggunakan
-f
opsi untuk memfilter pesan dari jurnal ( https://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html ).sumber