मुझे नहीं पता कि बाद के संस्करण क्या करते हैं, लेकिन आगे के शोध के बाद मैंने पाया कि शेल वाइल्डकार्ड समर्थित हैं। दोनों *
(एक से अधिक वर्णों का मिलान) और ?
(किसी एक वर्ण से मेल खाते) को विशिष्ट फ़ाइलों के मिलान के लिए जोड़ा जा सकता है।
एक उदाहरण के रूप में, यहां वे पैटर्न हैं जो आपके उपयोग के मामले के साथ-साथ एक फ़ाइल के बाकी हिस्सों से मेल खाते हैं जो कि पाया जा सकता है /etc/logrotate.d/process
/path/to/my/logfiles/process.????.????????.log
/path/to/my/logfiles/process.????.log
{
# Look for previously matched log files and rotate daily if found
daily
# use date as a suffix of the rotated file
dateext
# Compress log file, optional if the files are small enough
compress
# Allow for a log file pattern to NOT match in order to support both
# filename formats
missingok
# Do not create replacement log files, the application will do that
nocreate
# Keep 30 days worth of rotated logs
maxage 30
}
हालाँकि यदि आपने process
वास्तविक प्रक्रिया आईडी के लिए प्लेसहोल्डर बनने का इरादा किया है, तो मेरा मानना है कि आप प्रक्रिया आईडी नंबर की जगह वाइल्डकार्ड का उपयोग करके दूर हो सकते हैं:
/path/to/my/logfiles/*.????.????????.log
/path/to/my/logfiles/*.????.log
{
...
}
आशा है कि ये आपकी मदद करेगा। मैं भी एक रेगेक्स दृष्टिकोण की तलाश में था जो काम करेगा और आखिरकार मैंने जो महसूस किया, उसके बजाय शेल वाइल्डकार्ड के उपयोग पर निर्णय लिया, लेकिन अधिक जटिल समाधान।
एक उदाहरण:
एक रेग्ज समाधान के लिए खोज करते समय मुझे एक ब्लॉग पोस्ट मिली, जिसका शीर्षक था, " लॉगब्रोट ग्लोबिंग मैच से फाइल को छोड़ना " जो इस समाधान को प्रदान करता है:
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
nosharedscripts
prerotate
bash -c "[[ ! $1 =~ testprogram ]]"
endscript
}
मैंने उस उदाहरण में से दो वस्तुओं को खींच कर समाप्त किया और मैच को थोड़ा संशोधित किया। मेरी स्थिति में मैं कुछ इनपुट फ़ाइलों को छोड़कर एक निर्देशिका में सभी फ़ाइलों को घुमाना चाहता था, जिनमें .inp
विस्तार है।
मैंने ये ढूंढ निकाला:
# Force the prerotate "script" below to be run on each individual file
# in order to verify that it isn't an unprocessed input file
nosharedscripts
# Skip rotating any unprocessed input files (*.inp extension)
prerotate
bash -c "[[ ! $1 =~ \.inp$ ]]"
endscript
इसके अनुसार logrotate -d /etc/logrotate.d/myfilename
काम करता प्रतीत होता है। हालांकि जैसा कि मैंने उल्लेख किया है कि मैंने शेल वाइल्डकार्ड दृष्टिकोण का विकल्प चुना क्योंकि मेरे पीछे आने वाले किसी व्यक्ति के लिए इसे बनाए रखना आसान था।