পরিবর্তে, আমি ব্যবহার করেছি mv
cp
এটি অর্জনের জন্য আমি কমান্ডটি যে কোনও সফ্টওয়্যার যেদিকে চলছে সেখানে আপনি কিছু লগফিল রাখতে সক্ষম। বিভিন্ন ইউজার হোম ডায়ারে বা অ্যাপ্লিকেশন ডায়ারে থাকতে পারে এবং হার্ডলিংক হিসাবে এক জায়গায় সমস্ত লগ রয়েছে। আপনি যদি mv
কমান্ডটি ব্যবহার করেন তবে আপনি হার্ড লিঙ্কটি হারাবেন। cp
পরিবর্তে আপনি যদি আদেশটি ব্যবহার করেন তবে আপনি এই হার্ড লিঙ্কটি রাখবেন keep
আমার কোডটি এমন কিছু:
TMP_FILE="$(mktemp "${TMPFILENAME}.XXX")"
for FILE in "${LOGFILE_DIR}"/* ; do
tail -n $MAXLINES "${FILE}" > "${TMP_FILE}"
if [ $(ls -g "${TMP_FILE}" | awk '{print $4}') -lt $(ls -g "${FILE}" | awk '{print $4}') ] ; then
cp "${TMP_FILE}" "${FILE}"
fi
done
সুতরাং যদি ফাইলগুলি একই ফাইল সিস্টেমে থাকে তবে আপনি ব্যবহারকারীদের এবং সেই সাথে কিছু আলাদা অধিকার দিতে পারেন ${LOGFILE_DIR}
আমার মতো দৈর্ঘ্য পরিবর্তন করতে পারেন।
যদি হয় mv
আদেশটি আপনি ফাইলগুলির মধ্যে হার্ডলিঙ্কটি হারাবেন এবং তাই আপনার দ্বিতীয় ফাইলটি প্রথমটির সাথে বেশি সংযুক্ত না হয় - সম্ভবত অন্য কোনও জায়গায় স্থাপন করা হয়েছে।
অন্য জায়গায় যদি আপনি কাউকে ফাইলটি মুছে ফেলতে না দেন তবে আপনার লগগুলি একসাথে থাকতে পারে এবং আপনার নিজের স্ক্রিপ্টের মাধ্যমে সুন্দর নিয়ন্ত্রণ করা যায়।
logrotate
সম্ভবত ভাল। তবে আমি এই সমাধানে খুশি।
"" দ্বারা বিরক্ত হবেন না তবে আমার ক্ষেত্রে স্পেস এবং অন্যান্য বিশেষ অক্ষরের কিছু ফাইল রয়েছে এবং যদি আমি "" কাছাকাছি না করি বা পুরোটা খুব ভাল কাজ করে না।
উদাহরণস্বরূপ একটি দির রয়েছে যেখানে পুরানো ফাইলগুলি একটিতে স্বয়ংক্রিয়ভাবে জিপ হয়ে যায় OLDFILE.zip
এবং জিপ করা সমস্ত কিছু ফাইলের তালিকাভুক্ত হয় .zip_log
তাই .zip_log
এই দিরটিতেও রয়েছে তবে LOGFILE_DIR
আমার সাথে রয়েছে:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
সমান ফাইল হিসাবে এটি একটি হার্ড লিঙ্ক।
logrotate
মার্জিত সমাধান