หน้าจอเข้าสู่ระบบดู (หมุน)


0

ฉันใช้เซิร์ฟเวอร์จดหมายซึ่งฉันเชื่อมต่อโดยใช้ SSH ของฉัน .bash_profile มีการกำหนดค่าเพื่อแนบเซสชัน SSH กับบางอย่าง screen เซสชั่น

ตอนนี้ฉันต้องการบันทึก (เช่น syslog) พิมพ์ไปที่หน้าต่างเดียวของเซสชันหน้าจอนี้ ฉันพยายามวิ่ง

tail -f /var/log/syslog

แต่ผลลัพธ์จะหยุดทุกวันเวลา 6:25 น. ฉันเดาว่านั่นเป็นเวลาที่บันทึกจะหมุน ดังนั้นจึงมีวิธีพิมพ์บันทึกบนหน้าจอใช่หรือไม่

คำตอบ:


1

คุณต้องการ tail --follow=name /var/log/syslog

เหตุผลก็คือโดยค่าเริ่มต้น - ควรเป็นเพราะเหตุผลด้านประสิทธิภาพ - tail เปิดไฟล์ที่ระบุและจากนั้นตรวจสอบ อธิบายไฟล์ มันได้รับ จากนั้น open(2) เรียกร้องให้มีการเปลี่ยนแปลง ใช้งานได้ดีตราบใดที่ไฟล์มีการเปลี่ยนแปลง - ต่อท้ายหรือเขียนใหม่ (โดยตัดทอนก่อน) แต่จะหยุดทำงานหากไฟล์นั้น แทนที่ - นั่นคือถูกลบออกและสร้างด้วยชื่อเดียวกันและนั่นคือสิ่งที่ logrotate มักจะทำ

โหมด "ชื่อ" ของ --follow ยี่ห้อ tail ใช้ราคาแพงกว่า stat(2) syscall ซึ่งอันที่จริง "แก้ไข" ชื่อไฟล์ทุกครั้งผ่านชั้นระบบแฟ้มและถ้า tail สังเกตเห็นไฟล์ที่เปลี่ยนแปลงเรียกว่า "ไอโหนด" , tail เปิดไฟล์อีกครั้ง

ผลลัพธ์จาก man tail:

-f, --follow[={name|descriptor}]

เอาท์พุทผนวกข้อมูลเมื่อไฟล์เติบโต;   อาร์กิวเมนต์ตัวเลือกที่ขาดหมายถึง 'descriptor'

คุณอาจจะดู -F ตัวเลือกบรรทัดคำสั่งซึ่งกำหนดเป็น

-F เหมือนกับ --follow=name --retry


0

เดาของคุณถูกต้องจริง ในเวลานี้ syslog ขัดจังหวะการเขียนบนบันทึกสร้าง gz ของมันและเริ่มบันทึกใหม่

คุณสามารถลองด้วย

tail -f --retry /var/log/syslog

วิธีนี้ก้อยควรลองอีกครั้งเพื่อเปิดไฟล์อีกครั้งเมื่อการหมุนบันทึกเสร็จสิ้น

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