วิธีล้าง journalctl


208

ฉันไม่พบวิธีที่ปลอดภัยในการล้างบันทึก systemd ใน google ไม่มีใครรู้วิธีที่ปลอดภัยและเชื่อถือได้ที่จะทำเช่นนั้น?

สมมติว่าฉันกำลังทดลองกับบางสิ่งและบันทึกของฉันเต็มไปด้วยข้อความแสดงข้อผิดพลาดต่างๆ ยิ่งกว่านั้นฉันกำลังแสดงบันทึกประจำวันของฉันบนเดสก์ท็อปโดยใช้ Conky ฉันไม่ต้องการเห็นข้อผิดพลาดเหล่านั้นเพราะพวกเขาเตือนฉันวันอันยิ่งใหญ่ที่ฉันแก้ไขสิ่งนี้ฉันอยากรู้สึกเหมือนเป็นคนใหม่หลังจากสยองขวัญนี้ ฉันคิดว่าทุกคนจะยอมรับว่านี่เป็นเหตุผลที่ถูกต้องในการล้างบันทึก: P

คำตอบ:


289

วิธีการบำรุงรักษาด้วยตนเองคือการดูดบันทึกตามขนาดหรือเวลา

เก็บไว้เพียงสองวันที่ผ่านมา:

journalctl --vacuum-time=2d

เก็บไว้เพียง 500 MB ที่ผ่านมา:

journalctl --vacuum-size=500M

man journalctl สำหรับข้อมูลเพิ่มเติม.


11
คำสั่งที่ดี แต่ไม่ได้ผลสำหรับฉันใน openSUSE 13.2 (การปล่อยเสถียรในปัจจุบัน) เป็นที่ทราบกันดีว่า Arch มักจะอยู่ในระดับที่ทันสมัยเมื่อพูดถึงเคอร์เนลและโปรแกรม userland ดังนั้นฉันคาดการณ์ว่าอาจมีการเพิ่มตัวเลือกสูญญากาศใน systemd และเพิ่งไม่ได้ตกตะกอนลงใน distro ของฉัน ยืนยันความจริงที่นี่ในประกาศของ Lennart เมื่อวันที่ 10 ธันวาคม 2014 techupdates.com/go/1002774ว่าคำสั่งนี้ถูกเพิ่มใน systemd v218 เพียงแค่เพิ่มความคิดเห็นนี้ใส่กล่องอื่น ๆ เช่นฉันที่ไม่ได้อยู่ใน Arch มีปัญหาที่คล้ายกัน โหวตขึ้นแล้ว
Joshua Huber

ฉันเพิ่งใช้ 'journalctl --vacuum-time = 1d' เพื่อแก้ไขสถานการณ์ที่ข้อความบันทึกใหม่ไม่แสดงด้วย 'journalctl -f' เห็นได้ชัดว่าเวลาของระบบของฉันเพิ่มขึ้นชั่วคราวประมาณหนึ่งวันข้างหน้าชั่วครู่หนึ่งจากนั้นก็กู้คืนและ journalctl ใช้เวลาบันทึกเหตุการณ์จากเวลาในอนาคตเป็นหางวารสาร
user5071535

8
ไม่ทำงานในรุ่น "systemd 229" บน Ubuntu 16.04 journalctl --vacuum-size=1Kจากนั้นjournalctlยังคงแสดงวิธีมากกว่า 1K มันจะแสดงข้อความทั้งหมดตั้งแต่บูตครั้งสุดท้าย
Dan Dascalescu

18
ดูเหมือนว่าจะเป็นการล้างบันทึกที่เก็บถาวรเท่านั้นไม่ใช่ไฟล์ที่ใช้งานอยู่ ฉันลองใช้งานjournalctl --flush --rotateมาก่อนjournalctl --vacuum-time=1sและมันก็ลบสิ่งอื่น ๆ อีกมากมายถึงแม้ว่าจะไม่ใช่ทุกอย่าง
user60039

2
เอกสารดูเหมือนไม่ชัดเจนสำหรับฉัน มันตั้งอยู่เสมอที่ 2d (ในตัวอย่างของคุณ)? หรือเป็น 2d จากเวลาที่คุณเรียกใช้คำสั่ง? บางทีฉันอาจไม่เข้าใจวิธีการทำงานอย่างแน่นอน
jersey bean

84

โดยทั่วไปแล้วคุณไม่ได้ล้างวารสารด้วยตัวเอง ที่จัดการโดย systemd เองและบันทึกเก่าจะถูกหมุนเวียนเมื่อมีข้อมูลใหม่เข้ามาสิ่งที่ถูกต้องที่จะทำคือการกำหนดตารางเวลา journald ให้เก็บข้อมูลได้มากเท่าที่คุณสนใจสิ่งที่ปกติที่สุดในการปรับคือดิสก์ทั้งหมด พื้นที่ที่ได้รับอนุญาตให้ใช้ เมื่อมันข้ามขอบเขตนี้มันจะเริ่มต้นการขว้างรายการเก่าเพื่ออยู่ใกล้กับค่านี้

คุณสามารถตั้งค่าใน/etc/systemd/journald.confลักษณะดังนี้:

SystemMaxUse=100M

11
ตกลง แต่ก็มีสถานการณ์ที่ผิดปกติเช่นกัน ฉันรู้ว่าส่วนใหญ่ของพวกเขาเป็นเพียงความสวยงามเป็นเหตุผล แต่ความสวยงามเป็นเหตุผลที่ถูกต้องสำหรับมนุษย์;)
Łukasz Zaroda

2
@ ŁukaszZarodaในกรณีนี้คุณจะต้องกำหนด "ปลอดภัย" โดยปกติ "ฉันต้องการระเบิดสิ่งที่ daemon ถูกกำหนดค่าให้เก็บ" ไม่สามารถทำงานร่วมกับ "ปลอดภัย" ได้ หากคุณต้องการบังคับให้ปิดบริการและปิดล็อกไฟล์เป็นศูนย์ หากคุณต้องการให้มันทำงานได้ตามปกติคุณควรกำหนดพารามิเตอร์ในคำถามของคุณให้ดีขึ้น "ปลอดภัย" คุณหมายถึงอะไร
คาเลบ

โดยปลอดภัยฉันหมายความว่าหลังจากล้างมันจะทำงานได้ตามปกติเพียงแค่เริ่มจากที่ใหม่
Łukasz Zaroda

5
อาจไม่ใช่สถานการณ์ทั่วไป แต่บางครั้งมีความจำเป็นต้องลบบันทึกเก่าเนื่องจากข้อบกพร่องของ systemd บางอย่างเช่นbbs.archlinux.org/viewtopic.php?pid=1173031#p1173031
diffycat

1
บันทึกการทำความสะอาดหลังจากระยะเวลามากกว่าเมื่อพวกเขาถึงขนาดบางอย่างที่คุณสามารถตั้งค่าพารามิเตอร์แทนMaxRetentionSec SystemMaxUseดูman journald.confรายละเอียดเพิ่มเติมได้ที่
joelostblom

52

คำตอบของไมเคิลหายไปสิ่งหนึ่ง: การดูดฝุ่นจะลบเฉพาะไฟล์เจอร์นัลที่เก็บถาวรไม่ใช่ไฟล์ที่ใช้งานอยู่ ในการกำจัดทุกสิ่งคุณต้องหมุนไฟล์ก่อนเพื่อให้รายการล่าสุดถูกย้ายไปยังไฟล์ที่ไม่ได้ใช้งาน

ดังนั้นคำตอบที่สมบูรณ์เพื่อลบรายการทั้งหมดดูเหมือนจะเป็น

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

(โปรดทราบว่าคุณไม่สามารถรวมสิ่งนี้เป็นjournalctlคำสั่งเดียว)

โดยวิธีการกระจายบางส่วนมีการกำหนดค่า journald เพื่อที่จะเขียนบันทึกไปยังดิสก์ ( /var/log/journal) ในขณะที่คนอื่นเก็บบันทึกไว้ในหน่วยความจำ ( /run/log/journal) ฉันคาดว่าในบางกรณีอาจจำเป็นต้องใช้journalctl --flushก่อนเพื่อลบทุกอย่างออก

หากคุณไม่มี--rotateในเวอร์ชันคุณสามารถใช้--sinceอาร์กิวเมนต์เพื่อกรองรายการ:

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

journalctl: ตัวเลือกที่ไม่รู้จัก '--rotate'
stiv

1
ในขณะที่ฉันได้คำตอบอื่น ๆ ที่ใกล้เข้ามา (กลยุทธ์ระยะยาว) - คำถามนั้นง่าย: คุณจะล้างบันทึกได้อย่างไร (บางทีคุณอาจไม่สนใจงานระยะยาวสำหรับงานปัจจุบันของคุณ) นี่เป็นคำตอบของคำถามที่ไม่มีข้อสันนิษฐานอื่น ๆ และเพิ่มคุณค่าที่ยอดเยี่ยมอื่น ๆ ให้กับการทำความเข้าใจ journalctl นี่ควรเป็นคำตอบ
Marc

1
นี่เป็นคำตอบเดียวที่เป็นประโยชน์สำหรับฉัน ขอบคุณ!
Freedo

18

บน Arch linux สิ่งที่ฉันได้ใกล้ที่สุดคือ:

  • แก้ไข /etc/systemd/journald.conf เพื่อตั้ง SystemMaxUse = 1M
  • กำลังเริ่มบันทึกประจำวัน: sudo systemctl restart systemd-journald
  • การรีเซ็ต SystemMaxUse = 200M
  • เริ่มวารสารใหม่อีกครั้ง

ในระบบของฉันไฟล์เจอร์นัลแต่ละไฟล์คือ 8MB และไฟล์ข้างต้นถูกล้างทั้งหมดยกเว้น 3 ทำให้ขนาดทั้งหมดเท่ากับ ~ 25MB

กรณีการใช้งานของฉันถูกปิดการใช้งานวัว BTRFS sudo chattr +C /var/log/journal/*(เพียงไดเรกทอรีวารสารและไดเรกทอรีย่อย): ปัญหาคือมีการตั้งค่าแอตทริบิวต์ในไฟล์ที่สร้างขึ้นใหม่เท่านั้นดังนั้นความปรารถนาที่จะล้างข้อมูลบันทึกประจำวัน


4
กรณีใช้งานของคุณไม่จำเป็นจริงๆ จุดปิดการใช้งาน CoW ในเจอร์นัลคือการเขียนบ่อยๆ นั่นไม่ใช่กรณีของไฟล์เจอร์นัลแบบหมุนเก่าพวกเขาแค่นั่งอยู่ตรงนั้น
Hjulle

1
ฉันได้ตั้งSystemMaxUse=1Kเริ่มต้นใหม่systemd-journaldแต่ journalctl ยังคงแสดงรายการที่ฉันต้องการไป ความคืบหน้าจากไฟล์ข้อความแบบแบนเป็นอย่างไร
Dan Dascalescu

13

ตั้งแต่--vacuum-timeและ--vacuum-sizeไม่ได้ทำสิ่งใดสำหรับฉันฉันทำสิ่งต่อไปนี้:

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

มันไม่ถูกต้อง แต่ใช้งานได้


ใน Debian Jessie /run/logเส้นทางคือ
ซิงโคร

1
เพียงแค่นี้ช่วยฉัน!
T.Todua

นี่คือคำตอบที่ถูกต้องในปัจจุบัน มันจะดีถ้าคำสั่ง journalctl สามารถทำได้ แต่ดูเหมือนจะไม่สามารถ
Kevin Lyda

11

วิธีการที่ดุร้ายมากในการทำความสะอาดบันทึกทั้งหมด:

$ sudo journalctl --vacuum-time=1seconds

คุณยังสามารถใช้--vacuum-sizeเป็น Michael mentoined


5
ใช้งานไม่ได้ ผลงานเป็นเวลา 15 นาทีที่ผ่านมายังคงปรากฏขึ้นแม้หลังจากทำงานsystemctl restart systemd-journaldแล้ว
Dan Dascalescu

1
กันที่นี่ สิ่งนี้ไม่ได้ผลสำหรับฉันเช่นกัน ฉันใช้ CentOS7
jersey bean

5

ทั้ง - หมุนและ - สูญญากาศ - เวลา = 1 วินาทีไม่ทำงานกับฉันบน CentOS ฉันสามารถล้างมันได้เช่นนี้

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

ผมพบว่า 2 ./journalไดเรกทอรีที่มีชื่อในฐานสิบหก journalctlคำสั่งจะทำงานเฉพาะในหนึ่งล่าสุด ดังนั้นฉันจึงต้องลบไดเรกทอรีเก่าด้วยตนเองและปลอดภัย หลังจากที่ฉันเพิ่ง จำกัด ขนาดในสมุดรายวัน conf
KeitelDOG

1
  1. สำรองในกรณีที่คุณต้องการในอนาคต:
    cp /run/log/journal/<temp-string>/system.journal /mylog/dir/back/system.journal.bak

  2. ล้างไฟล์:
    cd /run/log/journal/<temp-string>/ >system.journal

  3. ตรวจสอบเพื่อดูบันทึกล่าสุด:
    journalctl -xe


1

journalctl -bจะแสดงจากการบู๊ตล่าสุดเท่านั้น นอกจากนี้คุณยังสามารถใช้-b -1, -b -2ฯลฯ วันที่น่ากลัวของคุณยังคงมี แต่คุณจะไม่ต้องเห็นมันเว้นแต่คุณจะต้อง


0

คำตอบก่อนหน้าของฉันเพิ่งถูกลบเพราะ "ซ้ำซ้อน" ขอโทษด้วยที่ยังไม่ชัดเจนในคำตอบก่อนหน้านี้ แต่มันแตกต่างจากคำตอบเดิม ดังนั้นนี่คือรุ่นที่มีเนื้อหาเพิ่มเติม

journalctl -m --vacuum-time=1sทำเคล็ดลับสำหรับฉัน โปรดสังเกตการ-mตั้งค่าสถานะนั้นจะรวมวารสารของคุณทั้งหมดแล้วทำความสะอาด หากไม่มีการ-mตั้งค่าสถานะมันไม่ได้ทำความสะอาดอะไรเลยในกรณีของฉัน (บน CentOS-7)

หวังว่ามันจะช่วย

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