ถ้าฉันทำ:
journalctl -u my-service
จากนั้นShift-Fให้ทำตามในขณะที่เพจจิ้งฉันจะ(interrupt to abort)ไม่ออกเพจเจอร์ได้อย่างไร
ด้วยlessปกติฉันแค่^Cแต่ถ้าฉันทำเช่นนั้นใน journalctl มันจะออกจากเพจเจอร์ทั้งหมด
ถ้าฉันทำ:
journalctl -u my-service
จากนั้นShift-Fให้ทำตามในขณะที่เพจจิ้งฉันจะ(interrupt to abort)ไม่ออกเพจเจอร์ได้อย่างไร
ด้วยlessปกติฉันแค่^Cแต่ถ้าฉันทำเช่นนั้นใน journalctl มันจะออกจากเพจเจอร์ทั้งหมด
คำตอบ:
คุณจะใช้lessที่จุดนั้น แต่ ^ C journalctlมีพฤติกรรมที่แตกต่างกันเนื่องจากวิธีการที่มันจะถูกเรียกโดย ค่าสถานะที่ journalctl ส่งผ่านเพื่อlessรวมค่าเริ่มต้นต่อไปนี้:
FRSXMK
ของเหล่านี้ฉันคิดว่าตัวเลือก "K" ใช้กับที่นี่:
-K หรือ --quit-on-intr ทำให้น้อยลงเพื่อออกทันที (ด้วยสถานะ 2) เมื่อพิมพ์อักขระขัดจังหวะ (ปกติ ^ C) ถูกพิมพ์ โดยปกติแล้วอักขระขัดจังหวะทำให้น้อยลงที่จะหยุดสิ่งที่มันทำและกลับไปที่พรอมต์คำสั่งของมัน โปรดทราบว่าการใช้ตัวเลือกนี้ทำให้ไม่สามารถกลับไปที่พรอมต์คำสั่งจากคำสั่ง "F"
ดังนั้นการตั้งค่า $ SYSTEMD_LESS ในสภาพแวดล้อมของคุณและการเว้นตัวเลือก "K" ควรแก้ไขปัญหามันไม่สามารถใช้กับการทดสอบบน Ubuntu 16.04 ได้:
SYSTEMD_LESS="FRSXM"journalctl -u nginx
อย่างไรก็ตามคุณสามารถรับพฤติกรรมที่คุณต้องการยืนยันได้ว่าธง K นั้นสัมพันธ์กันโดยการเปรียบเทียบพฤติกรรมของรูปแบบต่อไปนี้:
# ^C after Shift-F does not completely quit
journalctl -u nginx | less -FRSXM
# ^C after Shift-F completely quits
journalctl -u nginx | less -FRSXMK
ฉันเพิ่งเจอกับเหตุการณ์ที่น่ารำคาญนี้
การตั้งค่าSYSTEMD_LESSไม่ทำงานเนื่องจาก journalctl จะส่ง a SIGTERMไปยังเพจเจอร์เมื่อได้รับ ^ C
"ทางออก" ของฉันคือใช้นามแฝงทุบตีเช่นนี้
alias log='SYSTEMD_COLORS=1 journalctl | less -FRSXM'
สิ่งนี้จะแทนที่เพจเจอร์เริ่มต้นและจะไม่ออกเมื่อคุณขัดจังหวะการติดตาม
ตัวแปรสภาพแวดล้อมน่าจะเป็นวิธีเดียวที่จะมีสีและให้น้อยทำงานหลังจากที่SYSTEMD_COLORSSIGINT
สิ่งนี้ใช้ได้กับการติดตั้ง Debian 9 ของฉัน
journalctl | lessอาจเป็นบั๊ก
SYSTEMD_LESSแต่ฉันได้รับการยืนยันนี้จะlessเปลี่ยนธงที่ส่งไปยัง คุณสามารถตรวจสอบโดยการหา PID ของและการทำlessมองหาตัวแปรสภาพแวดล้อมhd /proc/<pid>/environLESSมันจะอยู่ที่นั่น แต่ว่างเปล่า (โดยปกติจะเป็นFRSXMK) คุณสามารถพิมพ์_Kตัวเองน้อยลงเพื่อดูว่ามีการตั้งค่าสถานะนั้นหรือไม่ โดยปกติมันเป็น ถ้าคุณผ่านSYSTEMD_LESS=มันไม่ได้ ฉันคิดว่ากระบวนการ journalctl คือการส่งสัญญาณวิทยุติดตามตัวเมื่อมันได้รับSIGINTซึ่งเป็นเหตุผลที่lessตายโดยไม่คำนึงถึงการตั้งค่าที่