ฉันจะล้างรายการ journalctl สำหรับหน่วยเฉพาะได้อย่างไร


19

ฉันใช้เวลาสองสามวันในการเขียนสคริปต์หลามและสร้างไฟล์หน่วย systemd ขึ้นมา ในระหว่างการทดสอบสคริปต์บันทึกข้อผิดพลาดจำนวนมากเพื่อเจอร์นัล ฉันต้องการลบข้อผิดพลาดจากเจอร์นัลตอนที่ฉันทำไปแล้ว

มีหลายวิธีในการล้างวารสารทั้งหมดตามที่อธิบายไว้ที่นี่: วิธีล้าง journalctl รวมถึงการใช้การjournalctl --vacuum-time=2dใช้journalctl --vacuum-size=500Mและการตั้งค่าชั่วคราวSystemMaxUse=ใน /etc/systemd/journald.conf ให้มีค่าต่ำมาก

ทั้งหมดเหล่านี้ดูเหมือนจะล้างวารสารทั้งหมดส่งผลกระทบต่อทุกหน่วย ฉันแค่ต้องล้างรายการสำหรับหน่วยเดียว เป็นไปได้ไหม


แนวทางที่เป็นไปได้คือการเขียนโปรแกรมโดยใช้ฟังก์ชั่นเจอร์นัลของ libsystemdเพื่อเขียนไฟล์เจอร์นัลโดยไม่ต้องลบรายการที่คุณต้องการ
Mathias Rav

คำตอบ:


6

ใช้โปรแกรม Python 3 ของฉันcopy_journal.pyในไฟล์เจอร์นัล/var/log/journalที่คุณต้องการลบรายการ

ตัวอย่างเช่นในการทำสำเนาsystem.journalโดยไม่มีรายการบันทึกสำหรับNetworkManager.service:

$ journalctl --file=system.journal | wc
    167    1934   18825
$ journalctl --file=system.journal | grep -v NetworkManager | wc
     77     881    8421
$ python3 copy_journal.py --remove-unit=NetworkManager.service system.journal system-without-nm.journal
$ journalctl --file=system-without-nm.journal | wc
     77     881    8421

-1

ฉันไม่คิดว่ามันเป็นไปได้เพราะอ้างอิงจากหน้าคู่มือ journalctl "เอาท์พุทแทรกจากไฟล์เจอร์นัลที่เข้าถึงได้ทั้งหมดไม่ว่าจะหมุนหรือกำลังเขียนอยู่"

อย่างไรก็ตามคุณสามารถกรองโดยใช้หน่วย - 'journalctl -u some.service' แล้วลองลบรายการบันทึกจากวารสารด้วยสคริปต์ของคุณเองโดยใช้ cron


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