উত্তর:
না, লিনাক্সের মতো অপারেটিং সিস্টেম এবং এটি ফাইল সিস্টেমগুলি কোনও ফাইলের শুরু থেকে ডেটা অপসারণের ব্যবস্থা করে না। অন্য কথায়, কোনও ফাইলের স্টোরেজের শুরুর পয়েন্টটি স্থির থাকে।
কোনও ফাইলের শুরু থেকে লাইনগুলি সরিয়ে ফেলা সাধারণত একটি নতুন ফাইলে বাকী ডেটা লিখে পুরানো মুছে ফেলা হয়। যদি কোনও প্রোগ্রামে লেখার জন্য পুরানো ফাইল খোলা থাকে তবে অ্যাপ্লিকেশন ফাইলটি বন্ধ না হওয়া পর্যন্ত সেই ফাইলটির মোছা স্থগিত করা হয়।
মন্তব্যকারীরা যেমন উল্লেখ করেছেন, আমার আগের বাক্যে প্রদত্ত কারণে, আপনার সাধারণত লগগুলি লেখার প্রোগ্রামগুলির সাথে লগফাইলে ছাঁটাইয়ের সমন্বয় করতে হবে। ঠিক কীভাবে আপনি এটি করেন তা নির্ভর করে প্রোগ্রামগুলির উপর। আপনি যখন একটি সিগন্যাল প্রেরণ করেন তখন কিছু প্রোগ্রাম তাদের লগফিলগুলি বন্ধ করে আবার খোলায় (উদাহরণস্বরূপ এইচইউপি) এবং এটি পরিষেবা বিঘ্নিত না করে লগ রেকর্ডগুলি 'মুছে ফেলা' লগফাইলে লিখিত হওয়া রোধ করতে ব্যবহৃত হতে পারে।
লগ ফাইলের আকার পরিচালনার জন্য অনেকগুলি ইউটিলিটি উপলব্ধ রয়েছে, উদাহরণস্বরূপ লোগ্রোটেট
কিছু প্রোগ্রামের নিজস্ব উপযোগিতা রয়েছে। উদাহরণস্বরূপ, অ্যাপাচি ওয়েবসার্ভারে একটি রোটেটলোগ্স ইউটিলিটি রয়েছে।
আমি মনে করি এই কাজটি দিয়েই অর্জন করা যায় sed
sed -i '1,10d' myfile
1 তম থেকে 10 ম লাইন পর্যন্ত লাইনগুলি ফাইলটি সরিয়ে ফেলবে ।
আমি মনে করি প্রত্যেকের কমপক্ষে এই সেড 1 লাইনারের দিকে নজর দেওয়া উচিত ।
নোট করুন যে এটি লগফাইলে কাজ করে না যা সক্রিয়ভাবে কোনও অ্যাপ্লিকেশন দ্বারা যুক্ত করা হয়েছে (প্রশ্নে বলা আছে)।
sed -i
একটি নতুন ফাইল তৈরি করবে এবং যে ফাইলটি লিখিত হচ্ছে তা 'মুছুন'। বেশিরভাগ অ্যাপ্লিকেশনগুলি মুছে ফেলা লগ ফাইলটিতে লগ রেকর্ড লিখতে থাকবে এবং ডিস্কের স্থান পূরণ করতে থাকবে। নতুন, কাটা, লগ ফাইল যুক্ত করা হবে না। এটি কেবল তখনই থামবে যখন অ্যাপ্লিকেশনটি পুনরায় চালু হবে বা অন্যথায় লগ ফাইলগুলি বন্ধ এবং পুনরায় খুলতে সিগন্যাল করা হবে। নতুন লগ ফাইলে কোন ফাঁক (লগ রেকর্ডগুলি হারিয়ে যাওয়া) থাকবে যদি সেড ব্যবহার এবং অ্যাপ্লিকেশন পুনরায় চালু করার মধ্যে কোনও লগ করার যোগ্য কার্যকলাপ থাকে।
এটি করার নিরাপদ উপায় হ'ল অ্যাপ্লিকেশনটি থামানো, লগটি কাটাতে সেড ব্যবহার করা, এবং অ্যাপ্লিকেশনটি পুনরায় চালু করা art এই পদ্ধতির কিছু পরিষেবার জন্য অগ্রহণযোগ্য হতে পারে (উদাহরণস্বরূপ উচ্চ থ্রুপুট এবং উচ্চ পরিষেবা-ধারাবাহিকতা প্রয়োজনীয়তা সহ একটি ওয়েব সার্ভার)
sed -i
একটি নতুন ফাইল তৈরি করে এবং পুরানোটি সরিয়ে ফেলা হয় যাতে আপনি সক্রিয় ফাইলটি সম্পাদনা করছেন না: $ ls -i --- 6823554 testfile --- $ sed -i 's/test/final/' testfile --- $ ls -i --- 6823560 testfile
------ দয়া করে কীভাবে sed -i
কাজ করে তা পরীক্ষা করে দেখুন । কেন এই ভুল উত্তরে এত উত্সাহ দেওয়া হয়েছে?
লগ ফাইলের বৃদ্ধির এই জেনেরিক সমস্যার সমাধান হ'ল লগ রোটেশন। এটিতে নিয়মিত (রাত্রে বা সাপ্তাহিক, সাধারণত) কোনও বিদ্যমান লগ ফাইলকে অন্য কোনও ফাইলের নামে সরিয়ে নেওয়া এবং খালি লগ ফাইল দিয়ে নতুন করে শুরু করা জড়িত। একটি পিরিয়ড পরে পুরানো লগ ফাইলগুলি ফেলে দেওয়া হয়।
দেখুন: http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm
এটি কোনও উত্তর নয়, কোনও সমাধান নয়। প্রশ্নের কোনও সমাধান নেই। প্রশ্নকর্তা স্পষ্টভাবে বলেছেন: " একটি অ্যাপ্লিকেশন দ্বারা সক্রিয়ভাবে সংযোজন করা লগ থেকে "। আপনি আরও বোঝার জন্য পড়তে পারেন এবং এই কোডটি কেন লগিংয়ের সেরা অনুশীলনগুলি অনুসরণ করে না তা আমার অনুমানের ভিত্তিতে করা একটি পরামর্শের জন্য শেষ পর্যন্ত যেতে পারেন ।
পরিষ্কার হতে: অন্যান্য "উত্তর" এখানে মিথ্যা প্রতিশ্রুতি দেয় । নতুন নামকরণের কোনও পরিমাণই অ্যাপ্লিকেশনটিকে নতুন ফাইলটি ব্যবহার করে চালিত করবে না। সবচেয়ে দরকারী তথ্য এই ভুল উত্তর দেওয়া মন্তব্যে সমাহিত করা হয়।
অ্যাক্টিভ ফাইলগুলি কোনও ধরণের ধারক নয় যা আপনি কেবল ডেটা .োকান। একটি ফাইলের নাম একটি আইনোডকে (ফাইলের শুরু) নির্দেশ করে এবং প্রতিটি ইনোডের অন্য আইনের একটি পয়েন্টার থাকে (যদি আরও ডেটা থাকে)। এর অর্থ এটি একটি নিয়মিত লিখিত টু ফাইলটিতে আইওনড যুক্ত হওয়ার একটি ধ্রুব স্ট্রিম থাকে এবং আপনি একটি "ফাইল" কী মনে করেন তা আসলে ইনোডের লগ অনুক্রম।
ভাবুন আপনি গুগল ম্যাপে কাউকে ট্র্যাক করছেন এবং সেই ব্যক্তি বিশ্বের যে কোনও জায়গায় যে কোনও সময় টেলিপোর্ট করতে পারে এবং আপনি এই বিন্দুগুলিকে সংযুক্ত করার চেষ্টা করছেন were
লিনাক্স সরঞ্জাম "ট্রানসেট" ফাইলের শেষে তথ্যটি বাতিল করতে পারে, কেবল ইনোড ট্রিটি হাঁটার মাধ্যমে এবং (যে অবস্থান / আকারে আপনি মনোনীত করেন) এটি স্ট্যাকের পরবর্তী সমস্ত পয়েন্টারগুলি ফেলে দেবে। বিপরীত কাজটি করার জন্য - ফাইলের শুরুতে ডেটা ফেলে দিন - রিয়েল-টাইমে ইনোড ট্রিটি পুনরায় লেখার এমন ভয়াবহ জটিল এবং ঝুঁকিপূর্ণ প্রক্রিয়া হবে যে জনসাধারণের জন্য এই জাতীয় সরঞ্জামগুলি কেউ লিখবে না, কারণ তারা প্রায়শই ব্যর্থ হয় এবং নেতৃত্ব দেয় তথ্য ক্ষতি Inodes উইকি ছোট কিন্তু এই ধারণার কিছু ব্যাখ্যা করে।
** আমার পরামর্শ: এই সমস্যাটি প্রায় ঘুরিয়ে ফেলুন - কেন এই অ্যাপ্লিকেশনটি এভাবে আচরণ করছে? অনেকগুলি লগিংয়ের সেরা অনুশীলন রয়েছে তবে প্রায়শই সেগুলি আপনার লগিং সিস্টেমটি আসলে (সিসলগ, ইত্যাদি) এর সাথে আবদ্ধ থাকে। মূলত, একটি অ্যাপ্লিকেশনটি এটি ফাইলের হ্যান্ডেলটিকে "রিলিজ" করবে বলে আশা করা হচ্ছে, সুতরাং লোগ্রোটেট (ইত্যাদি) পুরানো ডেটার আরও প্রক্রিয়াকরণ পরিচালনা করতে পারে।
আমি যখনই "অ্যাক্টিভ লগফাইলে" শুনি তখনই আমি সেই ব্যক্তিকে এই অ্যাপ্লিকেশনটির পিছনে "বিশেষ গল্প" বলতে বলি tell সাধারণত এটি "বিকাশকারী ছেড়ে যান, এবং আমরা কোডটি পরিবর্তন করতে পারি না This এটি আসলে সুরক্ষার বিপরীতমুখী, এটির নিজস্ব ঝুঁকির একটি সেট রয়েছে But তবে আমি আপনাকে এমন একটি সমাধান চাই যা উত্স কোডটি স্পর্শ করা এড়ায় want এটি যদি হয় কেস, আরও নির্দিষ্ট প্রশ্ন প্রয়োজন।
উত্সাহ পাঠ্যে খোলার লাইনগুলি মুছে ফেলা এবং ফাইলটি সংরক্ষণ করা কোনওভাবে কাজ করে, এমনকি যদি ফাইলটি সংযুক্ত হয়ে যায় তবে আমি একটি কমান্ড-লাইন সমাধানের সমাধানটি অনুসন্ধান করতে এসেছি, তাই আমি কেবল এখানে এই কার্যকরী তবে অকেজো সমাধানটি রেখে যাব !!
হতে পারে অনুলিপি, ছাঁটাই, কপিটি আবার আকার = 0 ছাঁটাইয়ের উপর ছেড়ে দিন এবং অনুলিপিটি মুছুন?
লেজ-অনুলিপি থেকে টুথেল আরও ভাল, মূলতে কাটা টুপি conc
আপনি লেগের দৈর্ঘ্যে লগটিতে লাইন পেতে পারেন তারপরে একটি বাইট দৈর্ঘ্যের সীমা better
মন্তব্য থেকে বিশদ সংশোধন:
প্রথমে পাইথন 3 এ আপনি যা চান তা আমাদের কাছে লগার স্ক্রিপ্ট রয়েছে
from time import sleep
idx = 0
while 1 == 1:
idx = (idx + 1)
lf = open('tailTrunc.log', 'a')
lf.write("line to file " + str(idx) + '\n')
lf.close()
sleep(0.01)
তারপরে আমাদের ট্রাঙ্কেটর রয়েছে
#!/usr/bin/env bash
trap "kill 0" EXIT
rm tailTrunc.log
touch tailTrunc.log
python3 logLoop.py &
loggerPID=$!
sleep 1
kill -STOP $loggerPID
tail -10 tailTrunc.log > trimEnd.log
truncate -s 0 tailTrunc.log
kill -CONT $loggerPID
sleep 1
trimEnd.log 80 থেকে 89 দেখায়
লগ 90 শেষ দেখায়
যাইহোক যেখানে ইচ্ছা সেখানে একটি উপায় আছে।
একত্রীকরণকারীগুলির আরও জটিল উদাহরণ এবং লেখার স্ট্রিমটি কীভাবে খোলা বা বন্ধ হয় তা প্রতি সিপিইউ কোরকে সামঞ্জস্য করতে পারে ইত্যাদি writing