ฉันจะหมุนล็อกไฟล์จำนวนมากเป็นไดเรกทอรีย่อยที่แตกต่างกันต่อการหมุนได้อย่างไร


12

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

ฉันสามารถใช้ logrotate เพื่อให้บรรลุผลส่วนใหญ่โดย roatating ไฟล์ในสถานที่หรือแม้แต่ย้ายพวกเขาไปยังไดเรกทอรีที่แตกต่างกันโดยใช้olddirคำสั่ง แต่ฉันมีปัญหาในการหาวิธีการแก้ปัญหาในการสร้างไดเรกทอรีย่อยแต่ละรายการต่อการหมุน ฉันจะทำสิ่งนี้ได้อย่างไร:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*

คำตอบ:


9

คุณควรจะสามารถเรียกสคริปต์ภายนอกในpostrotateคำสั่ง:

postrotate
  /path/to/your.sh
endscript

และให้สคริปต์ทำสิ่งเคลื่อนไหวเช่น:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

อย่างไรก็ตามมันอาจจะง่ายกว่าที่จะใช้dateextคำสั่ง โดยที่ไฟล์ที่หมุนจะถูกต่อท้ายด้วยการประทับเวลา (แม้ว่าจะไม่ถูกย้ายไปยังไดเรกทอรีอื่น)

ดูlogrotate(8)รายละเอียดเกี่ยวกับคำสั่งทั้งสอง


ดูเหมือนว่าpostrotateจะทำเคล็ดลับ สิ่งเดียวที่ฉันต้องเพิ่มคือการล้างไดเรกทอรีเก่าที่มีจำนวนมากกว่าหรือมากกว่าวันที่แน่นอน
Dave Forgac

1
ดูคำตอบที่อัปเดต find | xargsคำสั่งควรลบไดเรกทอรีย่อยทั้งหมดของทันที/var/log/exampleถ้าพวกเขามีการแก้ไขที่ผ่านมามากกว่า 7 วันที่ผ่านมา
Ansgar Wiechers

1

คุณมีolddirคำสั่งที่คุณสามารถใช้ในไฟล์กำหนดค่า

จากเอกสารประกอบ:

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

การอ้างอิง : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

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