วิธีใช้ logrotate ในเชลล์สคริปต์


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

ฉันต้องการใช้ logrotate เพื่อควบคุมขนาดของไฟล์บันทึกดังนั้นวิธีการใช้ logrotate หากสถานการณ์เป็นเช่นนี้

คำตอบ:


11
#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

ฉันได้ลบ "&" เนื่องจากอาจทำให้เกิดปัญหา


@Verendra เราจำเป็นต้องใส่ตรรกะของการกลิ้งท่อนในวงในขณะที่คุณกำลังเรียกใช้วงวนไม่สิ้นสุด ..
อยากรู้อยากเห็น

@Veerendra เราโพสต์ก่อนหน้าของฉันมีข้อผิดพลาด .. "mv" จะไม่สร้างไฟล์ใหม่ แต่คุณสามารถเปลี่ยนสคริปต์ได้ตามความต้องการของคุณ
อยากรู้อยากเห็น

ดังนั้นแทนที่จะเป็นcpและmvฉันสามารถลบไฟล์บันทึกจากนั้นจะเป็นไฟล์บันทึกใหม่ที่มีชื่อเดียวกันได้หรือไม่ (ความต้องการของฉันคือถ้าไฟล์บันทึกถึงขีด จำกัด ฉันต้องการลบไฟล์บันทึกนั้นแล้วสร้างไฟล์ใหม่ )
Veerendra Kakumanu

คุณควรใช้>>เพื่อผนวกเข้าสู่ไฟล์>จะเขียนทับมันซ้ำแล้วซ้ำอีก
alcik

ถ้าฉันใช้>ฉันได้รับtail: test.log: file truncated Hello World!.... ถ้าฉันใช้>>ฉันจะได้รับข้อความบันทึกที่ถูกต้อง แต่ขนาดไฟล์เพิ่มขึ้น ไม่มีเงื่อนไขในการตรวจสอบเงื่อนไข ... ;-(
Veerendra Kakumanu

24

วิธีการเกี่ยวกับการใช้งานsavelog?

มันมีอยู่ใน debian และ RH และลินุกซ์ distro อื่น ๆ ที่ฉันรู้จัก มันคือเชลล์สคริปต์ / bin / sh ดังนั้นควรรันยูนิกซ์อื่นด้วย

เช่นก่อนที่จะเขียนอะไรที่จะวิ่งtest.log savelog -n -c 7 test.logสิ่งนี้จะเก็บ test.log เวอร์ชันล่าสุดที่ไม่ว่างเปล่าไว้ 7 รายการ โดยค่าเริ่มต้นมันจะบีบอัดบันทึกที่หมุนเวียน (แต่สามารถปิดได้ด้วย-l)

หากคุณต้องการคุณสามารถตรวจสอบขนาดtest.logและเฉพาะsavelogเมื่อมันเกินขนาดที่กำหนด


มีความคิดใดที่แพ็คเกจนี้มี AWS Linux (ใกล้กับ CentOS ฉันเชื่อ)? การติดตั้งเริ่มต้นไม่มี savelog ฉันหาไม่ได้จากยำโดยใช้ repos เริ่มต้น
jhonkola

ไม่พบ savelog ใน RHEL 5. คุณรู้หรือไม่ว่า repo นั้นควรอยู่ใน?
Felipe Alvarez

ความคิดเกี่ยวกับ CentOS หรือบรรจุภัณฑ์ RHEL5 แต่คุณสามารถหา/usr/bin/savelogเชลล์สคริปต์ที่sources.debian.net/src/debianutils/4.7
cas

2
ฉันไม่พบsavelogกล่อง RHEL / CentOS 5/6 ใด ๆ ของฉันดังนั้นฉันเพิ่งดาวน์โหลดมันเฉพาะกิจและดูเหมือนว่าจะทำงานได้ดีตามความต้องการของฉัน
เดลเดอร์สัน

ข้อเสียอย่างหนึ่งของsavelogมันคือการเปลี่ยนชื่อไฟล์ แต่ใช้เวลานานในการ gzip ไฟล์เก่าก่อนที่จะจบ ในขณะเดียวกันบันทึก. 0 จะได้รับรายการในวันถัดไป โดยทั่วไปแล้วเวลาระหว่างการหมุนบันทึกและการส่งสัญญาณกระบวนการเพื่อเปิดบันทึกควรน้อยที่สุด ฉันปิดการใช้งานsavelogคุณสมบัติการบีบอัดเพราะสิ่งนี้
rustyx

2

ฉันเขียนlogroteeสุดสัปดาห์นี้ ผมก็อาจจะไม่ได้ถ้าฉันได้อ่าน @ JdeBP ของคำตอบที่ดีเกี่ยวกับmultilog

ฉันมุ่งเน้นไปที่มันมีน้ำหนักเบาและสามารถ bzip2 ชิ้นงานที่ชอบ:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

แม้ว่าจะมีหลายสิ่งที่ต้องทำและทดสอบ


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