লোগ্রোটেট সফল, মূল ফাইলটি মূল আকারে ফিরে যায়


11

লোগ্রোটেটের সাথে কারও কি কোনও সমস্যা ছিল যার ফলে একটি লগ ফাইলটি ঘোরানো হয় এবং তারপরে এটি যে আকারে ছিল সেটির আকারে ফিরে যায়? আমার অনুসন্ধানগুলি এখানে:

লোগ্রোটেট লিপি:

/var/log/mylogfile.log
    7 ঘোরান
    দৈনন্দিন
    কম্প্রেস
    olddir / log_archives
    missingok
    notifempty
    copytruncate
}

লোগ্রোটেটের ভার্বোজ আউটপুট:

অনুলিপি /var/log/mylogfile.log / /log_archives/mylogfile.log.1 এ
কাটা /var/log/mylogfile.log
লগটি সংক্ষিপ্ত করে: / বিন / জিজিপ
পুরানো লগ / ব্লগ_আরচিভস / মাইলগফিল.লগ.8.gz অপসারণ করা হচ্ছে

ট্র্যাঙ্কেটের পরে ফাইল লগ করুন

[রুট @ সার্ভার ~] # এলএস-এলএইচ /var/log/mylogfile.log
-rw-rw-r-- 1 part1 part1 0 জানুয়ারী 17 17:32 /var/log/mylogfile.log

আক্ষরিক পরে দ্বিতীয়:

[রুট @ সার্ভার ~] # এলএস-এলএইচ /var/log/mylogfile.log
-rw-rw-r-- 1 part1 part1 3.5G জানুয়ারী 17:32 /var/log/mylogfile.log

আরএইচইএল সংস্করণ:

[রুট @ সার্ভার ~] # বিড়াল / ইত্যাদি / রেডহ্যাট-রিলিজ 
Red Hat Enterprise Linux ES রিলিজ 4 (নাহন্ত আপডেট 4)

লোগ্রোটেট সংস্করণ:

[মূল @ DAA21529WWW370 ~] # আরপিএম -কিউ | গ্রেপ লোগ্রোটেট
logrotate-3.7.1-10.RHEL4

কয়েকটি নোট:

  • ফ্লাইতে পরিষেবাটি আরম্ভ করা যায় না, এজন্যই আমি কপিআরঙ্কেট ব্যবহার করছি
  • olddirপ্রতিটি রাত থেকে লগ ফাইলের ডিরেক্টরি অনুসারে লগগুলি প্রতিটি রাত্রে ঘোরানো হয় ।

উত্তর:


18

এটি সম্ভবত কারণ আপনি ফাইলটি কেটে ফেললেও, ফাইলটিতে লেখা প্রক্রিয়াটি শেষ পর্যন্ত যে কোনও অফসেটে লিখতে থাকবে। সুতরাং যা ঘটছে তা হ'ল লোগ্রোটেট ফাইলটি কেটে ফেলেছে, আকারটি শূন্য, প্রক্রিয়াটি আবার ফাইলটিতে লিখতে শুরু করে, অফসেটটি এটি ছেড়ে দেওয়া অবিরত রেখেছিল, এবং আপনার এখন নূলে-বাইটস সহ একটি ফাইল রয়েছে যেখানে আপনি এটি কেটে ফেলেছেন নতুনটি লগতে লিখিত এন্ট্রি।

od -c এর পরে কাটা + হঠাৎ বৃদ্ধি, এর লাইন বরাবর আউটপুট উত্পন্ন:

0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
33255657600  \0   C   K   B   -   s   e   r   v   e   r       [   h   t   t
33255657620 <more log output>

এটি যা বলছে তা অফসেট থেকে 0 থেকে 33255657600 পর্যন্ত আপনার ফাইলটি নাল বাইট এবং তারপরে কিছু স্পষ্ট ডেটা নিয়ে থাকে। এই রাজ্যে পৌঁছাতে একই ধরণের সময় লাগবে না actually সমস্ত নাল-বাইটস আসলে লিখতে। এক্সট্রা {2,3,4} ফাইল সিস্টেমগুলি স্পার্স ফাইল নামক কিছুটিকে সমর্থন করে, সুতরাং আপনি যদি এমন কোনও ফাইলের অঞ্চল অনুসন্ধান করেন যার মধ্যে কিছুই থাকে না, তবে সেই অঞ্চলটি নাল-বাইটগুলি ধারণ করে বলে মনে করা হবে এবং স্থান গ্রহণ করবে না ডিস্কে এই নাল বাইটগুলি আসলে লিখিত হবে না, কেবল সেখানে উপস্থিত বলে ধরে নেওয়া হয়েছে, তাই 0 থেকে 3.5 জিবি যেতে সময় লাগে খুব বেশি সময় নেয় না। (আপনি এটির মতো সময় লাগার সময় পরীক্ষা করতে পারেন dd if=${HOME}/.bashrc of=largefile.bin seek=3432343264 bs=1, এটি কয়েক মিলি সেকেন্ডে 3 গিগাবাইটেরও বেশি ফাইল তৈরি করতে পারে )।

যদি আপনি ls -lsআপনার লগ-ফাইলে তাদের কেটে ফেলার পরে আবার চালিয়ে যান এবং হঠাৎ করে বৃদ্ধি পেয়েছেন তবে লাইনের শুরুতে এটি এমন একটি সংখ্যার প্রতিবেদন করা উচিত যা প্রকৃত আকারের (ডিস্কে দখলকৃত ব্লকগুলিতে) প্রতিনিধিত্ব করে, সম্ভবত এটি প্রশস্ততার আদেশ মাত্র দ্বারা রিপোর্ট করা আকারের চেয়ে ছোট ls -l


আমি মনে করি না - সেকেন্ডে লগ ফাইলটি 0 বাইট থেকে 3.5 জিবিতে যায়। লোগ্রোটেটটি সম্পূর্ণ হতে সময় লাগে প্রায় 5 মিনিট। লগ ফাইলগুলি সেই দ্রুত লিখিত হয় না এবং আকারটি সর্বদা আসল আকার, যা খুব বেশি কাকতালীয় বলে মনে হয়।
ড্রভরশার্ড

এটি যাচাই করার একটি সহজ উপায় থাকতে হবে, ফাইলটি পরীক্ষা করুন এবং দেখুন এটিতে আসলে কিছু আছে কিনা। ও-সি ফাইলের নাম চালিয়ে শুরু করুন শিরোনাম -n 100. সম্ভাবনা কি এটি কয়েক লাইনে আপনাকে জানাবে যে নাল-বাইটের একটি ট্রাক বোঝা, সর্বশেষতম লগ-এন্ট্রি রয়েছে।
কেজেটিল জোর্জেনসেন

যদি এটি হয় তবে কি আমরা পরীক্ষা করতে পারি যে ক্যাট / ডিভেল / নাল> /var/log/mylogfile.log ফাইলটি এমনভাবে কাটাচ্ছে কিনা যা কপিরআরঙ্কটে নির্মিত লোগ্রোটেট ব্যবহার না করে এই সমস্যার সমাধান করে?
এমটিনবার্গ

2
ফাইলটি যেভাবে ছেঁটে ফেলা হয়েছে তাতে সমস্যাটি নেই, প্রোগ্রামটি লগ-ফাইলে কীভাবে লিখবে তা নিয়েই সমস্যাটি রয়েছে। লগফিলকে একটি কার্যকর পন্থা হিসাবে ছাঁটাই করার জন্য, আপনাকে প্রোগ্রামটি লেখার জন্য কোনওভাবে লগফাইলে লিখতে হবে 0 অবস্থান নিতে হবে এটি সম্ভবত সম্ভব যে কোনও ফাইল সিস্টেম যা স্পার্স ফাইলগুলিকে সমর্থন করে না এই সমস্যাটি হবে না, যদিও আমি ডন করি না এখনই পরীক্ষার কোনও উপায় নেই।
কেজেটিল জোর্জেনসেন

1
এই চূড়ান্ত উত্তরটি প্রকৃতপক্ষে আরও অর্থবোধ করেছে এবং ঠিকঠাকটি সম্ভবত অ্যাপ্লিকেশনটি পুনরায় আরম্ভ করবে।
ড্রভরশার্ড

2

আমি চূড়ান্ত আত্মবিশ্বাসী যে কেজেটিল এতে আঘাত করেছে। ড্র, আপনি এখনও তার ব্যাখ্যা দ্বারা নিশ্চিত হতে পারেন না কিন্তু আমি আপনাকে তিনি যা বলেছে তা মনোযোগ সহকারে পড়ার অনুরোধ করছি।

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

ErrorLog "|/usr/sbin/rotatelogs /www/logs/error_log 604800"

যা এরকম নাম সহ প্রচুর লগফাইলে সৃষ্টি করে

-rw-r--r--    1 root     root         4078 Dec 21 01:04 error_log.1292457600
-rw-r--r--    1 root     root         4472 Dec 29 08:41 error_log.1293062400
-rw-r--r--    1 root     root        78630 Jan  4 12:57 error_log.1293667200
-rw-r--r--    1 root     root        15753 Jan 12 01:10 error_log.1294272000

অ্যাপাচি পুনরায় চালু না করে উপস্থিত হওয়া; আমি পরে তাদের পরে ম্যানুয়ালি সংক্ষিপ্ত করতে পারেন। নোট কিভাবে ঘূর্ণন প্রতি সপ্তাহে যা প্রতি 604800 সেকেন্ড, প্রেরণ যুক্তি হচ্ছে যে কাজ করা হয়, rotatelogs

আপনি যদি অ্যাপটি থামাতে এবং পুনরায় চালু করতে না পারেন এবং এটি কোনও পাইপের মাধ্যমে লগ করতে না পারে তবে আমি মনে করি আপনি একটি আসল সমস্যা পেয়েছেন। অন্যের পরামর্শ থাকতে পারে।


0

আপনি পুরো লোগ্রোটেটটি পাঠাতে পারলে এটি সত্যিই দুর্দান্ত হবে would

কিল-হুপ ব্যবহার করার চেষ্টা করবেন কেন? (ধ্রুপদী পুনরায় লোডিং পুনরায় আরম্ভ হচ্ছে না ) পদ্ধতি।

এছাড়াও ... lsof ফাইলটি কে অ্যাক্সেস করছে তা পরীক্ষা করে দেখুন ।


kill -HUPএই অ্যাপ্লিকেশনটি কোনওভাবেই ছোঁয়া যায় না বলে এটি ব্যবহার করতে পারি না - এটি একটি সংবেদনশীল অ্যাপ্লিকেশন যা আমার নিজস্ব নয় (আমি এটি পরিচালনাও করি না - আমি কেবল ওএস সাইডটি পরিচালনা করি) সুতরাং এটি লগরোটেশনগুলি করতে সক্ষম হতে হবে উপায়।
ড্রভরশার্ড

1
দুঃখিত, আসল বার্তাটি তাড়াতাড়ি জমা দেওয়া হয়েছে, এখানে আমার মূল বার্তাটি এখানে রয়েছে: আমি আজ সকালে সিস্টেমে লগইন করেছি এবং তফসিলযুক্ত লোগ্রোটেটটি শুরুর পরে ফাইলটি এখন স্বাভাবিক অবস্থায় ফিরে এসেছে /etc/cron.daily। সবার কাছে প্রশ্ন: লোগ্রোটেট লিপিটি নিজে লোগ্রোটেট চালানোর চেয়ে আলাদাভাবে কিছু করে? আমার logrotate স্ক্রিপ্ট আক্ষরিক মত দেখায় /usr/sbin/logrotate /etc/logrotate.conf। এটি বেশ বিস্মিত।
ড্রভরশার্ড

-1

কেবলমাত্র ">>" এর অর্থ ">" এর পরিবর্তে সংযোজন যার অর্থ আপনার স্ক্রিপ্টগুলি এই ফাইলটিতে লেখার থেকে তৈরি করুন। আমার ঠিক একই সমস্যা ছিল এবং আমি আমার স্ক্রিপ্টে অ্যাপেন্ড ব্যবহার করে এটি ঠিক করেছি।

সামসস্ক্রিপ্ট.শ >> আউটপুট.টেক্সট

আশা করি এটা পরিষ্কার হয়ে গেছে।


কোনও ইঙ্গিত নেই যে লগ ফাইলটিতে লিখন >কোনও স্ক্রিপ্ট থেকে ব্যবহার করা হয়েছে। তবুও এই উত্তরটি বিভ্রান্তিকর কারণ এখানে >এবং >( )স্ক্রিপ্টগুলির মধ্যে একটি বড় পার্থক্য রয়েছে । অবশেষে যদি লিখিতকরণের কোডটি আপডেট করা হয় তবে এটি নতুন logrotateকাজ করার পরে কেবল নতুন লগফাইলে লিখতে শুরু করাই আরও ভাল ।
kasperd

আমি আমার উত্তরটি সম্পাদনা করি যাতে এটি পরিষ্কার হয়।
ব্যবহারকারী578558
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.