วิธีดูบรรทัด x ล่าสุดจากบันทึกการทำงาน systemctl


21

ฉันกำลังมองหาวิธีเพียงพิมพ์บรรทัด X สุดท้ายจากบริการ systemctl ใน Debian ฉันต้องการติดตั้งรหัสนี้ในสคริปต์ซึ่งใช้รายการบันทึกที่พิมพ์และล่าสุด ฉันพบโพสต์นี้แต่ฉันไม่สามารถแก้ไขได้ตามวัตถุประสงค์ของฉัน

ขณะนี้ฉันกำลังใช้รหัสนี้ซึ่งเพิ่งให้ข้อมูลโค้ดไฟล์เล็กน้อยกับฉัน:

journalctl --unit=my.service --since "1 hour ago" -p err

ในการให้ตัวอย่างว่าผลลัพธ์ควรมีลักษณะอย่างไรให้พิมพ์คำสั่งด้านบนเพื่อรับบริการและเลื่อนไปจนจบบันทึก จากนั้นคัดลอก 300 บรรทัดล่าสุดที่เริ่มต้นจากด้านล่าง

ความคิดของฉันคือการใช้ egrep เช่น egrep -m 700 .แต่ตอนนี้ฉันไม่มีโชค

คำตอบ:



7

เพียงส่งออกท่อไปที่tail:

journalctl --unit=my.service | tail -n 300

tailคำสั่งพิมพ์เส้นที่ผ่านมา (10 โดยค่าเริ่มต้น) ที่ได้รับใน stdin ที่ stdout


1
ลืมหางโดยสิ้นเชิง - เป็นความคิดที่ดีขอบคุณมาก!
user3191334

5
ส่วนท้ายอาจเจ็บปวดช้าสำหรับบันทึกขนาดใหญ่ ในตัว-nของ journalctrl คือสิ่งที่คุณต้องการ เช่นjournalctl -n 300
Drakes

4

หากคุณต้องการดูจำนวนบรรทัดสุดท้ายn และดูข้อความใหม่เมื่อพิมพ์ลงในบันทึกให้ลองทำดังนี้:

journalctl -u <service name> -n <number of lines> -f

โดยที่-nระบุจำนวนบรรทัดที่คุณต้องการดูจากส่วนท้ายของบันทึกและ-fระบุว่าคุณต้องการติดตามบันทึกเมื่อมีการเปลี่ยนแปลง


4

แค่:

journalctl -u SERVICE_NAME -e

พารามิเตอร์-eย่อมาจาก:

-e - เพจเจอร์; ข้ามไปยังตอนท้ายของวารสารภายในเครื่องมือเพจเจอร์โดยนัย สิ่งนี้บ่งบอกถึง -n 1,000 เพื่อรับประกันว่าเพจเจอร์จะไม่บัฟเฟอร์บันทึกขนาดที่ไม่ จำกัด สิ่งนี้อาจถูกแทนที่ด้วยความชัดเจน -n ด้วยค่าตัวเลขอื่น ๆ ในขณะที่ -nall จะปิดการใช้งานฝาครอบนี้


1

ตั้งแต่โซลูชันคำสั่ง tail มีให้บริการฉันพยายามโดยใช้ sed commmand และทำงานได้ดี

คำสั่งด้านล่างจะแสดง 300 บรรทัดสุดท้าย

journalctl --unit=my.service | sed -e :a -e '$q;N;301,$D;ba' 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.