Cara menghapus journalctl


209

Saya tidak dapat menemukan di google cara apa pun yang aman untuk menghapus jurnal systemd. Adakah yang tahu cara aman dan andal untuk melakukannya?

Katakanlah saya sedang bereksperimen dengan sesuatu dan log saya berantakan dengan berbagai pesan kesalahan. Selain itu saya menampilkan jurnal saya di desktop saya dengan menggunakan Conky. Saya benar-benar tidak ingin melihat kesalahan-kesalahan itu karena mengingatkan saya pada hari yang buruk ketika saya memperbaiki barang-barang ini, saya ingin merasa seperti orang baru setelah kengerian ini. Saya pikir semua orang akan setuju bahwa ini adalah alasan yang sah untuk menghapus log: P.

Jawaban:


290

Metode perawatan sendiri adalah untuk menyedot log berdasarkan ukuran atau waktu.

Pertahankan hanya dua hari terakhir:

journalctl --vacuum-time=2d

Pertahankan hanya 500 MB yang lalu:

journalctl --vacuum-size=500M

man journalctl untuk informasi lebih lanjut.


11
Perintah yang bagus, tetapi tidak bekerja untuk saya di openSUSE 13.2 (rilis stabil saat ini). Sudah diketahui bahwa Arch biasanya berada di ujung tombak ketika datang ke program kernel dan userland, jadi saya berspekulasi bahwa opsi vakum mungkin baru-baru ini ditambahkan ke systemd dan tidak diendapkan ke distro saya. Mengonfirmasi fakta di sini dalam pengumuman Lennart pada 10 Desember 2014 techupdates.com/go/1002774 bahwa perintah ini ditambahkan dalam systemd v218. Hanya menambahkan komentar ini jika ada orang lain seperti saya yang tidak ada di Arch memiliki masalah yang sama. Terpilih pula.
Joshua Huber

Saya hanya menggunakan 'journalctl --vacuum-time = 1d' untuk memperbaiki situasi di mana pesan log baru tidak muncul dengan 'journalctl -f'. Rupanya waktu sistem saya untuk sementara waktu melonjak sekitar satu hari ke depan, lalu pulih, dan journalctl menggunakan cap waktu acara log dari waktu mendatang sebagai jurnal tail.
user5071535

8
Tidak bekerja di versi "systemd 229" di Ubuntu 16.04. journalctl --vacuum-size=1Kkemudian journalctlmasih menunjukkan cara lebih dari 1K. Ini menunjukkan semua pesan sejak boot terakhir.
Dan Dascalescu

18
Tampaknya ini hanya membersihkan log yang diarsipkan, bukan yang aktif. Saya mencoba berlari journalctl --flush --rotatesebelumnya journalctl --vacuum-time=1sdan menghapus lebih banyak barang, meskipun masih belum semuanya.
user60039

2
Dokumentasinya sepertinya tidak begitu jelas bagi saya. Apakah selalu tetap disetel ke 2d (dalam contoh Anda)? Atau 2d dari saat Anda menjalankan perintah? Mungkin saya tidak mengerti bagaimana cara kerjanya.
kacang jersey

85

Anda biasanya tidak menghapus jurnal sendiri. Itu dikelola oleh systemd sendiri dan log lama diputar ketika data baru masuk. Hal yang benar untuk dilakukan adalah menjadwalkan journald untuk hanya menyimpan data sebanyak yang Anda minati. Hal paling umum untuk menyesuaikan adalah total disk ruang itu diizinkan untuk mengambil. Setelah melewati batas ini, ia akan mulai memasukkan entri lama agar tetap dekat dengan nilai ini.

Anda dapat mengatur ini /etc/systemd/journald.confseperti:

SystemMaxUse=100M

11
Ok, tapi ada juga situasi yang tidak biasa. Saya tahu bahwa kebanyakan dari mereka hanyalah estetika sebagai alasan, tetapi estetika adalah alasan yang valid untuk manusia;).
Łukasz Zaroda

2
@ ŁukaszZaroda Dalam hal ini Anda harus mendefinisikan "aman". Biasanya "Saya ingin menerbangkan sesuatu yang daemon dikonfigurasi untuk menjaga" tidak kompatibel dengan "aman". Jika Anda ingin memaksanya, matikan saja layanan dan nolkan file log. Jika Anda ingin berfungsi secara normal, Anda harus mendefinisikan parameter dalam pertanyaan Anda dengan lebih baik. Apa yang Anda maksud dengan "aman"?
Caleb

Dengan aman, maksud saya setelah membersihkannya akan berfungsi seperti biasa, baru mulai dari tempat baru.
Łukasz Zaroda

5
Ini mungkin bukan situasi yang umum tetapi kadang-kadang perlu untuk menghapus log lama karena beberapa bug systemd, misalnya bbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat

1
Untuk membersihkan log setelah periode waktu alih-alih ketika mereka mencapai ukuran tertentu, Anda dapat mengatur parameter MaxRetentionSecalih-alih SystemMaxUse. Lihat man journald.confuntuk lebih jelasnya.
joelostblom

52

Jawaban Michael hilang satu hal: menyedot debu hanya menghapus file jurnal yang diarsipkan, bukan yang aktif. Untuk menghilangkan semuanya, Anda perlu memutar file terlebih dahulu sehingga entri terbaru dipindahkan ke file tidak aktif.

Jadi, jawaban lengkap untuk menghapus semua entri sepertinya

journalctl --rotate
journalctl --vacuum-time=1s

(Perhatikan bahwa Anda tidak dapat menggabungkan ini menjadi satu journalctlperintah.)

Omong-omong, beberapa distribusi telah dikonfigurasikan journald sehingga ia menulis log ke disk ( /var/log/journal) sementara yang lain menyimpan log dalam memori ( /run/log/journal). Saya berharap bahwa dalam beberapa kasus mungkin perlu menggunakan journalctl --flushdulu untuk menghapus semuanya.

Jika tidak ada --rotatedalam versi Anda, Anda bisa menggunakan --sinceargumen untuk memfilter entri:

--since "2019-01-30 14:00:00"
--since today

jurnalctl: opsi tidak dikenal '--rotate'
stiv

1
sementara saya mendapatkan apa yang mendekati jawaban lain (strategi jangka panjang) - pertanyaannya sederhana: bagaimana Anda menghapus log sekarang (mungkin Anda tidak tertarik pada jangka panjang untuk tugas Anda saat ini). Ini menjawab pertanyaan itu tanpa membuat asumsi lain dan menambah nilai besar lainnya untuk memahami jurnal. Ini seharusnya jawabannya.
Marc

1
Ini adalah satu-satunya jawaban yang membantu saya. Terima kasih!
Freedo

18

Di Arch linux, yang paling dekat yang saya dapatkan adalah:

  • Edit /etc/systemd/journald.conf untuk mengatur SystemMaxUse = 1M
  • Mulai ulang jurnal: sudo systemctl restart systemd-journald
  • Menyetel Ulang SystemMaxUse = 200M
  • Memulai kembali jurnal

Di sistem saya, setiap file jurnal adalah 8MB, dan di atas dihapus semua kecuali 3, sehingga ukuran total ~ 25MB.

Penggunaan-kasus saya menonaktifkan Kontrak Karya untuk Btrfs (hanya untuk direktori jurnal dan subdirektori): sudo chattr +C /var/log/journal/*. Masalahnya adalah, atribut hanya diatur pada file yang baru dibuat, sehingga keinginan untuk menyiram jurnal.


4
Kasus penggunaan Anda sebenarnya tidak diperlukan. Inti dari melumpuhkan Kontrak Karya pada jurnal adalah bahwa hal itu sering ditulis. Itu tidak terjadi untuk file jurnal yang diputar lama, mereka hanya duduk di sana.
Hjulle

1
Saya telah menetapkan SystemMaxUse=1K, memulai kembali systemd-journald, tetapi jurnalctl masih menunjukkan entri yang saya ingin pergi. Bagaimana kemajuan ini dari file teks datar?
Dan Dascalescu

13

Karena --vacuum-timedan --vacuum-sizetidak melakukan apa pun untuk saya, saya melakukan hal berikut:

$ sudo find /var/log/journal -name "*.journal" | xargs sudo rm 
$ sudo systemctl restart systemd-journald

Itu tidak benar, tetapi berhasil.


Di Debian Jessie, jalannya adalah /run/log.
Sinkronisasi

1
hanya ini yang membantu saya!
T.Todua

Ini adalah jawaban yang benar saat ini. Akan lebih baik jika perintah journalctl bisa melakukan ini tetapi tampaknya tidak bisa.
Kevin Lyda

11

Metode yang sangat kasar untuk membersihkan seluruh log:

$ sudo journalctl --vacuum-time=1seconds

Anda juga dapat menggunakan --vacuum-sizeMichael sebagai mentoined.


5
Tidak bekerja Entri selama 15 menit yang lalu masih muncul, bahkan setelah berjalan systemctl restart systemd-journald.
Dan Dascalescu

1
Sama disini. Ini juga tidak berhasil untuk saya. Saya menjalankan CentOS7.
kacang jersey

5

Baik --rotate dan --vacuum-time = 1 tidak bekerja untuk saya di CentOS. Saya dapat menghapusnya seperti ini:

sudo rm -rf /run/log/journal/*

Saya menemukan 2 direktori dengan nama heksadesimal di ./journal. The journalctlperintah hanya bekerja di satu terbaru. Jadi saya harus menghapus direktori lama secara manual dan itu aman. Setelah saya batasi saja ukurannya di jurnal conf.
KeitelDOG

1
  1. Cadangkan jika Anda membutuhkannya di masa depan:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. Hapus file:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. Periksa untuk melihat log terbaru:
    journalctl -xe


1

journalctl -bhanya akan ditampilkan dari boot terbaru. Anda juga dapat menggunakan -b -1, -b -2dll. Hari Anda yang mengerikan masih ada tetapi Anda tidak perlu melihatnya, kecuali Anda perlu.


0

Jawaban saya sebelumnya baru saja dihapus karena "digandakan". Yah, maaf karena tidak cukup jelas dalam jawaban saya sebelumnya, tetapi itu berbeda dari jawaban yang ada. Jadi, inilah versi yang lebih rumit:

journalctl -m --vacuum-time=1smelakukan trik untukku. Mohon perhatikan -mbendera , itu menggabungkan semua jurnal Anda dan kemudian membersihkannya. Tanpa -mbendera, itu tidak membersihkan apa pun dalam kasus saya (pada CentOS-7).

Semoga ini bisa membantu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.