ในยูนิกซ์วิธีที่ดีที่สุดในการลดขนาดของไฟล์บันทึกขนาดใหญ่ที่ถูกเขียนลงไปคืออะไร?


11

บนเซิร์ฟเวอร์ linux ฉันต้องการลดขนาดของไฟล์บันทึกที่มีขนาดใหญ่หลาย GB ตัดครึ่งบนหรืออาจจะล้านบรรทัดแรกจะได้ผล

คำตอบ:


12

สิ่งนี้เกิดขึ้นในการสัมภาษณ์บ่อยครั้ง ...

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

: > /var/log/badlogfile

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

ดูเพิ่มเติมได้ที่: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/


1
เครื่องหมายโคลอนควรระบุพร้อมต์หรือไม่หรือที่จริงแล้วเข้าสู่คำสั่งหรือไม่?
Phil

ลำไส้ใหญ่เป็นส่วนหนึ่งของคำสั่ง
ewwhite

คุณไม่จำเป็นต้องใช้ลำไส้ใหญ่
MikeyB

มันเป็นไม่มี ไม่จำเป็น แต่ฉันต้องการเก็บไว้ที่นั่นเมื่อฉันแนะนำ
ewwhite

สิ่งนี้ไม่ได้ผลสำหรับฉันบันทึกไม่ได้เปลี่ยนขนาด มันไปที่ 0 แต่กลับมาที่ขนาดเต็ม
เจ้า

2

คุณสามารถใส่ไว้ใน logrotate จากนั้นมันจะไม่สามารถควบคุมได้ง่าย


ในที่สุดที่ต้องเกิดขึ้น ฉันใหม่ในงานนี้ ...
Phil

1

หากมีการเขียนถึงคุณอย่างจริงจังคุณจะไม่สามารถตัดทอนได้ ตัวเลือกเดียวของคุณคือการทำให้ไฟล์ว่างเปล่า (คุณสามารถคัดลอกไปที่อื่นก่อน)

echo "" >/var/log/fileYouWantToEmpty

วิธีนี้ทำให้ไฟล์ว่างเปล่า แต่ยังคงเป็นไฟล์ / inode เดียวกันดังนั้นมันจะไม่รบกวนโปรแกรมที่กำลังบันทึก


0

คุณสามารถลอง cat / dev / null> / var / log / แต่ฉันต้องเตือน / dev / null ไม่ได้ใช้ในบางรุ่นเก่า ...


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