Sejak saya "memutakhirkan" ke systemd di Arch Linux, saya terus kehilangan log ketika terjadi penguncian yang tidak terduga. Saya menemukan masalah kehilangan-log yang sama satu bulan yang lalu dan hanya menemukan masalah lagi. Ada juga konfirmasi independen lainnya .
Situasi:
- Saat melakukan beberapa hal di Jawa dan dengan utilitas terkait jaringan, saya melihat bahwa KDE (jam) dibekukan. Kipas CPU menjadi bising dan panasnya meningkat. Pointer mouse masih bisa dipindahkan.
- Saya mencoba ssh dari komputer lain (gagal karena "tidak ada rute ke host")
- Saya menunggu beberapa menit, mungkin pengawas NMI dapat membunuh tugas yang menyinggung. Tidak ada dadu.
- Ctrl+ Alt+ F1tidak berfungsi, bahkan setelah SysRq+R
- Karena langkah-langkah di atas tidak berhasil, saya memutuskan untuk mengeluarkan urutan SysRq REI. Setelah itu E, layar menjadi hitam, tetapi tidak ada konsol juga. Bahkan setelah SysRq+K
- Jadi, sesi ini tampaknya hilang, satu-satunya hal yang dapat dilakukan adalah mengumpulkan informasi debug. Melihat Wikipedia , saya memutuskan untuk menekan SysRq+ d(tampilan memegang kunci) di antara beberapa lainnya.
- Setelah menekan SysRq+ Ssaya menunggu sebentar dan kemudian reboot dengan SysRq+ B.
- Setelah reboot dan masuk ke konsol, saya tidak melihat jejak crash. Entri yang terakhir dicatat dari menggunakan Wireshark, tetapi masih ada celah 45 menit.
(Saya menjalankan Linux v3.8-rc5-218-ga56e160 btw)
Jadi, bagaimana saya bisa memastikan bahwa log saya dipertahankan ketika reboot normal karena penguncian?
systemd
logs
debugging
systemd-journald
Lekensteyn
sumber
sumber
systemd
atau tidak? Baru-baru ini saya melihat masalah serupa. Saya telah memposting detailnya di sini -> unix.stackexchange.com/questions/414871/…SyncIntervalSec
opsi (antara lain) pada manusiajournald.conf(5)
.man jounrnald.conf(5)
: SyncIntervalSec = ... Perhatikan bahwa sinkronisasi dilakukan tanpa syarat segera setelah pesan log dari prioritas CRIT, ALERT atau EMERG telah dicatat. Pengaturan ini karenanya hanya berlaku untuk pesan tingkat ERR, PERINGATAN, PEMBERITAHUAN, INFO, DEBUG. Bukankah ini hanya berarti bahwa jika kesalahan kritis dicatat itu seharusnya disinkronkan "segera" tanpa menunggu interval? Jadi artinya jika terjadi kesalahan kritis kita seharusnya melihatnya dalamjournald
log. Apakah saya kehilangan sesuatu ?!Jawaban:
Jadi saya bertanya pada saluran IRC #systemd dan ternyata journald (daemon logging dari systemd) tidak secara berkala menyiram log ke disk sama sekali. Ini berarti bahwa log Anda selalu berisiko kapan saja.
Mengirim
SIGUSR2
kejournald
penyebab log untuk ditulis ke disk, tetapi jika Anda melakukan ini beberapa kali, banyak file akan dibuat. (opsi ini sebenarnya digambarkan sebagai "rotating log").Pada akhirnya, saya memutuskan untuk pergi dengan saran lain: menggunakan daemon syslog khusus untuk mengumpulkan log kernel. Sebagai rsyslog disarankan (dan saya sudah berpengalaman dengan itu), saya mengeksplorasi opsi itu lebih lanjut. Saya telah menulis beberapa detail lagi di Arch Wiki tentang penggunaan rsyslog.
Idenya adalah menjalankan rsyslog, hanya mengumpulkan data dari fasilitas kernel. Ketika rsyslog membaca dari
/proc/kmsg
(yang hanya mengizinkan satu pembaca) dan journald membaca dari/dev/kmsg
(banyak pembaca diizinkan), tidak ada cara daemon kehilangan log (sangat penting bagi saya!). Konfigurasikan rsyslog untuk menulis pesan kernel ke file dan pastikan file ini diputar untuk mencegah memakan ruang disk Anda.Solusi ini tidak sempurna:
grep
pada file log tunggal atau lebih lambat, tetapi lebih bagusjournalctl
.Ada item TODO untuk pembilasan log lebih sering, tetapi itu masih belum cukup andal:
Sekarang, semoga systemd / journald akan mendapatkan opsi untuk menulis log ke disk, tetapi sementara itu kita dapat menggabungkan alat untuk mencapai tujuan.
sumber
Ada dua pembaruan:
Ada opsi
--sync
:--sync
tersedia sejakv228
:man journald.conf(5)
mengatakan:SyncIntervalSec=
tersedia sejakv199
:Lihat juga:
journald: kirim SIGTERM / SIGINT dengan prioritas rendah
sumber