मैं कई लॉग फ़ाइलों को एक अलग उपनिर्देशिका प्रति रोटेशन में कैसे घुमा सकता हूं?


12

मेरे पास कई लॉग फ़ाइलों के साथ एक निर्देशिका है, जिनमें से सभी को मैं रोजाना घुमाना चाहूंगा। संगठनात्मक उद्देश्यों के लिए, मैं लॉग के अंतिम सप्ताह को ध्यान में रखते हुए घुमाए गए लॉग को दिनांक के नाम से एक अलग निर्देशिका (या उपनिर्देशिका) में ले जाना चाहूंगा।

मैं फ़ाइलों को इन-स्थान पर रोटेट करके या यहां तक ​​कि निर्देशन का उपयोग करके उन्हें एक अलग निर्देशिका में ले जाने के लिए लॉगऑट्रेट का उपयोग कर सकता हूं, 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चाल चलेगा। केवल एक चीज जो मुझे जोड़ने की आवश्यकता है, वह है पुरानी निर्देशिकाओं को शुद्ध करना जो एक निश्चित संख्या से अधिक हैं या एक निश्चित तिथि से अधिक पुरानी हैं।
डेव फोर्गैक

1
अद्यतन उत्तर देखें। find | xargsआदेश के सभी तत्काल उप निर्देशिकाओं को हटा देना चाहिए /var/log/exampleअगर वे अंतिम बार संशोधित किया गया था की तुलना में अधिक 7 दिन पहले।
अंसार विचर

1

आपके पास olddirनिर्देश है जो आप कॉन्फ़िगर फ़ाइल में उपयोग कर सकते हैं।

प्रलेखन से:

olddir
लॉग को रोटेशन के लिए निर्देशिका में ले जाया जाता है। निर्देशिका को उसी भौतिक उपकरण पर होना चाहिए जिस लॉग फ़ाइल को घुमाया जा रहा है, और यह माना जाता है कि लॉग फ़ाइल को पकड़े निर्देशिका के सापेक्ष है जब तक कि एक पूर्ण पथ नाम निर्दिष्ट नहीं किया जाता है। जब इस विकल्प का उपयोग लॉग के सभी पुराने संस्करण निर्देशिका में करते हैं। यह विकल्प विकल्प द्वारा ओवरराइड किया जा सकता है noolddir

संदर्भ : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.