ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলিতে ফাইলগুলি লগরোটিং করছে


62

logrotateডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে লগফাইলে বিবেচনা করা কি সম্ভব ? (অর্থাত্ স্পষ্টভাবে উপ-ডিরেক্টরিগুলি তালিকাভুক্ত না করে))

উত্তর:


87

আপনার সাব ডিরেক্টরিটি কত গভীর যেতে পারে?

/var/log/basedir/*.log /var/log/basedir/*/*.log {
    daily
    rotate 5
}

সব ঘুরবে .log basedir মধ্যে ফাইল / সেইসাথে সব .log basedir কোন সরাসরি সন্তানের ফাইল। আপনার যদি আরও 1 টি স্তর আরও গভীরভাবে যেতে হয় তবে /var/log/basedir/*/*/*.logপ্রতিটি স্তরকে coveredেকে না দেওয়া পর্যন্ত কেবল একটি যুক্ত করুন ।

এটি পৃথক লোগ্রোটেট কনফিগারেশন ফাইল ব্যবহার করে পরীক্ষা করা যেতে পারে যা একটি সীমাবদ্ধতা রয়েছে যা পূরণ করা হবে না (একটি উচ্চ মাইনসাইজ) এবং তারপরে লগটি ভার্জোজ মোডে নিজেকে ঘোরান running

logrotate -d testconfig.conf

-d ফ্ল্যাগটি প্রতিটি লগ ফাইলকে ঘোরানোর জন্য বিবেচনা করছে তা তালিকাভুক্ত করবে।


6
ধন্যবাদ! দেখতে দেখতে -dশুকনো রান মোডে লোগ্রোটেট রাখার মতো (যেমন আসলে কোনও পরিবর্তন হয় না)।
ithinkihaveacat

1
সত্যিই সরাসরি প্রাসঙ্গিক নয় তবে কারও পক্ষে সম্ভবত কার্যকর। -fবিকল্প "বল রান" করতে logrotate বলে। কমান্ডের শেষে একটি খালি শব্দটি ডিফল্ট পরিবর্তে ব্যবহার করার জন্য একটি কনফিগার ফাইল। সুতরাং logrotate -f /some/configকনফিগার ফাইলটি দিয়ে চালান, এবং কনফিগার ফাইলটি এখনও চালানোর সময় হয়নি বলেও সর্বদা চালান। আমার প্রশিক্ষণপ্রাপ্ত চোখ এবং আমার পূর্বসূরীর কাছে যারা ক্রোন জব রেখেছিল, মনে -fহয়েছিল কেবল কনফিগারেশন ফাইলটি নির্দিষ্ট করে দিচ্ছে। বেশ বিভ্রান্তিকর।
ড্যান প্রাইটস

4

আমার ক্ষেত্রে সাব ডাইরেক্টরিগুলির গভীরতা সতর্কতা ছাড়াই পরিবর্তিত হতে পারে, তাই আমি সমস্ত উপ-ডিরেক্টরিগুলি খুঁজে পেতে এবং প্রতিটি ডিরেক্টরিতে একটি কনফিগার এন্ট্রি তৈরি করতে একটি বাশ স্ক্রিপ্ট সেট আপ করি set

ঘোরার পরে উপ-ডিরেক্টরিগুলির কাঠামোটি রাখা আমার পক্ষেও গুরুত্বপূর্ণ, যা ওয়াইল্ডকার্ডগুলি (যেমন @ ড্যানআর এর উত্তর) বলে মনে হচ্ছে না। আপনি যদি প্রতিদিন লগ ঘূর্ণন করে থাকেন তবে আপনি এই স্ক্রিপ্টটি দৈনিক ক্রোন-কাজের মধ্যে রাখতে পারেন।

basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents

subfolders = $(find ${basedir} -type d)

for ii in ${subfolders}
do
    jj=${ii:${#basedir}} #strip off basedir, jj is the relative path

    #append new entry to config_file
    echo "${basedir}${jj}/* {
        olddir ${destdir}${jj}/
        daily
        rotate 5
    }" >> ${config_file}

    #add one line as spacing between entries
    echo "\n" >> ${config_file}

    #create destination folder, if it doesn't exist
    [ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done

@ ড্যানআর প্রস্তাবিত মত, পরীক্ষা করুন logrotate -d


1

এটি পুরানো থ্রেড তবে আপনি নিম্নলিখিতটি করতে পারেন:

/var/log/basedir/**/*.log {
    daily
    rotate 5
}

এই দুটি তারা শূন্য বা আরও বেশি ডিরেক্টরিতে মিলবে। আপনাকে অবশ্যই যত্নবান হতে হবে, আপনি কীভাবে লগ ফাইলগুলি ঘোরানোর জন্য সংজ্ঞায়িত করেন, কারণ আপনি ইতিমধ্যে ঘোরানো ফাইলগুলি ঘোরান। আমি এখানে লোগ্রোটেটের ম্যানুয়ালটি উদ্ধৃত করব।

সাবধানতার সাথে ওয়াইল্ডকার্ড ব্যবহার করুন। যদি আপনি * নির্দিষ্ট করে থাকেন তবে লোগ্রোটেট পূর্ববর্তী ঘোরানো ফাইলগুলি সহ সমস্ত ফাইল ঘোরানো হবে। এর চারপাশের উপায়টি হল পুরানো নির্দেশিকা বা আরও নির্ভুল ওয়াইল্ডকার্ড (যেমন *। লগ) use


3
এই ওয়াইল্ডকার্ড প্যাটার্নটি আমার পক্ষে কার্যকর হয়নি। লোগ্রোটেটটি 3.8.6 RHEL 7.3 এ
উত্তরবেন

globstarলোগ্রোটেট চালানোর আগে আপনার সক্ষম করা উচিত । এটি এটি ব্যাশের জন্য সক্ষম করবে shopt -s globstar
bat_ventzi

আমি একই সমস্যা আছে। উবুন্টু 16.04.3 এ লোগ্রোটেট 3.8.7। ls /var/log/basedir/**/*.log বর্ণিত হিসাবে কাজ করে তবে লোগ্রোটেট তা করে না।
ফ্রগস্টায়ার 78

লোগ্রোটেট ৩.১১.০-তে আমার পক্ষে কাজ করে না। লোগ্রোটেট ওয়াইল্ডকার্ডগুলির সাথে ব্যাশ সম্প্রসারণের কোনও সম্পর্ক আছে বলে আমি মনে করি না। (অনুরূপ বাক্য গঠন ব্যতীত)
থাইনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.