logrotate
ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে লগফাইলে বিবেচনা করা কি সম্ভব ? (অর্থাত্ স্পষ্টভাবে উপ-ডিরেক্টরিগুলি তালিকাভুক্ত না করে))
logrotate
ডিরেক্টরি এবং এর সমস্ত উপ-ডিরেক্টরিতে লগফাইলে বিবেচনা করা কি সম্ভব ? (অর্থাত্ স্পষ্টভাবে উপ-ডিরেক্টরিগুলি তালিকাভুক্ত না করে))
উত্তর:
আপনার সাব ডিরেক্টরিটি কত গভীর যেতে পারে?
/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 ফ্ল্যাগটি প্রতিটি লগ ফাইলকে ঘোরানোর জন্য বিবেচনা করছে তা তালিকাভুক্ত করবে।
-f
বিকল্প "বল রান" করতে logrotate বলে। কমান্ডের শেষে একটি খালি শব্দটি ডিফল্ট পরিবর্তে ব্যবহার করার জন্য একটি কনফিগার ফাইল। সুতরাং logrotate -f /some/config
কনফিগার ফাইলটি দিয়ে চালান, এবং কনফিগার ফাইলটি এখনও চালানোর সময় হয়নি বলেও সর্বদা চালান। আমার প্রশিক্ষণপ্রাপ্ত চোখ এবং আমার পূর্বসূরীর কাছে যারা ক্রোন জব রেখেছিল, মনে -f
হয়েছিল কেবল কনফিগারেশন ফাইলটি নির্দিষ্ট করে দিচ্ছে। বেশ বিভ্রান্তিকর।
আমার ক্ষেত্রে সাব ডাইরেক্টরিগুলির গভীরতা সতর্কতা ছাড়াই পরিবর্তিত হতে পারে, তাই আমি সমস্ত উপ-ডিরেক্টরিগুলি খুঁজে পেতে এবং প্রতিটি ডিরেক্টরিতে একটি কনফিগার এন্ট্রি তৈরি করতে একটি বাশ স্ক্রিপ্ট সেট আপ করি 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
এটি পুরানো থ্রেড তবে আপনি নিম্নলিখিতটি করতে পারেন:
/var/log/basedir/**/*.log {
daily
rotate 5
}
এই দুটি তারা শূন্য বা আরও বেশি ডিরেক্টরিতে মিলবে। আপনাকে অবশ্যই যত্নবান হতে হবে, আপনি কীভাবে লগ ফাইলগুলি ঘোরানোর জন্য সংজ্ঞায়িত করেন, কারণ আপনি ইতিমধ্যে ঘোরানো ফাইলগুলি ঘোরান। আমি এখানে লোগ্রোটেটের ম্যানুয়ালটি উদ্ধৃত করব।
সাবধানতার সাথে ওয়াইল্ডকার্ড ব্যবহার করুন। যদি আপনি * নির্দিষ্ট করে থাকেন তবে লোগ্রোটেট পূর্ববর্তী ঘোরানো ফাইলগুলি সহ সমস্ত ফাইল ঘোরানো হবে। এর চারপাশের উপায়টি হল পুরানো নির্দেশিকা বা আরও নির্ভুল ওয়াইল্ডকার্ড (যেমন *। লগ) use
globstar
লোগ্রোটেট চালানোর আগে আপনার সক্ষম করা উচিত । এটি এটি ব্যাশের জন্য সক্ষম করবে shopt -s globstar
।
-d
শুকনো রান মোডে লোগ্রোটেট রাখার মতো (যেমন আসলে কোনও পরিবর্তন হয় না)।