บนเซิร์ฟเวอร์ linux ฉันต้องการลดขนาดของไฟล์บันทึกที่มีขนาดใหญ่หลาย GB ตัดครึ่งบนหรืออาจจะล้านบรรทัดแรกจะได้ผล
บนเซิร์ฟเวอร์ linux ฉันต้องการลดขนาดของไฟล์บันทึกที่มีขนาดใหญ่หลาย GB ตัดครึ่งบนหรืออาจจะล้านบรรทัดแรกจะได้ผล
คำตอบ:
สิ่งนี้เกิดขึ้นในการสัมภาษณ์บ่อยครั้ง ...
คุณต้องการตัดทอนไฟล์โดยไม่ทำให้กระบวนการหยุดชะงักหรือไม่? ข้อมูลใด ๆ ในล็อกไฟล์มีค่าหรือไม่ ถ้าเป็นเช่นนั้นฉันมักจะ "ศูนย์" ไฟล์ที่มีสตริงทุบตีง่าย
: > /var/log/badlogfile
สิ่งนี้เกิดขึ้นในสถานการณ์ที่คุณอาจมีแอพพลิเคชั่นที่ไม่สามารถรีสตาร์ทในลักษณะที่ควบคุมได้ สมมติว่าเป็นแอปพลิเคชันการซื้อขายทางการเงินและโปรแกรมไม่สามารถหยุดหรือเริ่มใหม่ในระหว่างวันซื้อขาย อย่างไรก็ตามไฟล์บันทึกกำลังเติบโตในอัตราลามกอนาจารเนื่องจากข้อบกพร่องของแอปพลิเคชัน การตัดไฟล์บันทึกโดยใช้วิธีการด้านบนหรือด้านล่างสามารถทำให้ระบบทำงานต่อไปได้
ดูเพิ่มเติมได้ที่: http://www.cyberciti.biz/faq/truncate-large-text-file-in-unix-linux/
คุณสามารถใส่ไว้ใน logrotate จากนั้นมันจะไม่สามารถควบคุมได้ง่าย
หากมีการเขียนถึงคุณอย่างจริงจังคุณจะไม่สามารถตัดทอนได้ ตัวเลือกเดียวของคุณคือการทำให้ไฟล์ว่างเปล่า (คุณสามารถคัดลอกไปที่อื่นก่อน)
echo "" >/var/log/fileYouWantToEmpty
วิธีนี้ทำให้ไฟล์ว่างเปล่า แต่ยังคงเป็นไฟล์ / inode เดียวกันดังนั้นมันจะไม่รบกวนโปรแกรมที่กำลังบันทึก
คุณสามารถลอง cat / dev / null> / var / log / แต่ฉันต้องเตือน / dev / null ไม่ได้ใช้ในบางรุ่นเก่า ...