একটি সক্রিয় লগ ফাইল থেকে প্রথম এন লাইনগুলি সরান


26

Nকোনও অ্যাপ্লিকেশন দ্বারা সক্রিয়ভাবে সংযোজন করা লগ থেকে প্রথম লাইনগুলি সরানোর কোনও উপায় আছে কি ?

উত্তর:


10

না, লিনাক্সের মতো অপারেটিং সিস্টেম এবং এটি ফাইল সিস্টেমগুলি কোনও ফাইলের শুরু থেকে ডেটা অপসারণের ব্যবস্থা করে না। অন্য কথায়, কোনও ফাইলের স্টোরেজের শুরুর পয়েন্টটি স্থির থাকে।

কোনও ফাইলের শুরু থেকে লাইনগুলি সরিয়ে ফেলা সাধারণত একটি নতুন ফাইলে বাকী ডেটা লিখে পুরানো মুছে ফেলা হয়। যদি কোনও প্রোগ্রামে লেখার জন্য পুরানো ফাইল খোলা থাকে তবে অ্যাপ্লিকেশন ফাইলটি বন্ধ না হওয়া পর্যন্ত সেই ফাইলটির মোছা স্থগিত করা হয়।


মন্তব্যকারীরা যেমন উল্লেখ করেছেন, আমার আগের বাক্যে প্রদত্ত কারণে, আপনার সাধারণত লগগুলি লেখার প্রোগ্রামগুলির সাথে লগফাইলে ছাঁটাইয়ের সমন্বয় করতে হবে। ঠিক কীভাবে আপনি এটি করেন তা নির্ভর করে প্রোগ্রামগুলির উপর। আপনি যখন একটি সিগন্যাল প্রেরণ করেন তখন কিছু প্রোগ্রাম তাদের লগফিলগুলি বন্ধ করে আবার খোলায় (উদাহরণস্বরূপ এইচইউপি) এবং এটি পরিষেবা বিঘ্নিত না করে লগ রেকর্ডগুলি 'মুছে ফেলা' লগফাইলে লিখিত হওয়া রোধ করতে ব্যবহৃত হতে পারে।

লগ ফাইলের আকার পরিচালনার জন্য অনেকগুলি ইউটিলিটি উপলব্ধ রয়েছে, উদাহরণস্বরূপ লোগ্রোটেট

কিছু প্রোগ্রামের নিজস্ব উপযোগিতা রয়েছে। উদাহরণস্বরূপ, অ্যাপাচি ওয়েবসার্ভারে একটি রোটেটলোগ্স ইউটিলিটি রয়েছে।


3
ফাইলটি খোলা আছে এবং এখনও এতে সংযোজন থাকা অবস্থায় আপনার এটি করা উচিত নয় কারণ এটি এখন মুছে ফেলা ফাইলটিতে লিখবে এবং আপনি সেই লগ বার্তাগুলি হারাবেন।
তার্নে কলমেন

সত্য। এমনকি যদি আপনি একই ফাইলের নাম ব্যবহার করেন।
হেনেস

খুব খারাপ ওএস আপনাকে দেয় না, এটি নিশ্চিত যে লগ রোটারগুলিকে ঘোরানোর পরে প্রক্রিয়াগুলি পুনরায় লোড না করতে সুবিধাজনক হবে: |
রজারডপ্যাক 17

25

আমি মনে করি এই কাজটি দিয়েই অর্জন করা যায় sed

sed -i '1,10d' myfile

1 তম থেকে 10 লাইন পর্যন্ত লাইনগুলি ফাইলটি সরিয়ে ফেলবে ।

আমি মনে করি প্রত্যেকের কমপক্ষে এই সেড 1 লাইনারের দিকে নজর দেওয়া উচিত ।

নোট করুন যে এটি লগফাইলে কাজ করে না যা সক্রিয়ভাবে কোনও অ্যাপ্লিকেশন দ্বারা যুক্ত করা হয়েছে (প্রশ্নে বলা আছে)।

sed -iএকটি নতুন ফাইল তৈরি করবে এবং যে ফাইলটি লিখিত হচ্ছে তা 'মুছুন'। বেশিরভাগ অ্যাপ্লিকেশনগুলি মুছে ফেলা লগ ফাইলটিতে লগ রেকর্ড লিখতে থাকবে এবং ডিস্কের স্থান পূরণ করতে থাকবে। নতুন, কাটা, লগ ফাইল যুক্ত করা হবে না। এটি কেবল তখনই থামবে যখন অ্যাপ্লিকেশনটি পুনরায় চালু হবে বা অন্যথায় লগ ফাইলগুলি বন্ধ এবং পুনরায় খুলতে সিগন্যাল করা হবে। নতুন লগ ফাইলে কোন ফাঁক (লগ রেকর্ডগুলি হারিয়ে যাওয়া) থাকবে যদি সেড ব্যবহার এবং অ্যাপ্লিকেশন পুনরায় চালু করার মধ্যে কোনও লগ করার যোগ্য কার্যকলাপ থাকে।

এটি করার নিরাপদ উপায় হ'ল অ্যাপ্লিকেশনটি থামানো, লগটি কাটাতে সেড ব্যবহার করা, এবং অ্যাপ্লিকেশনটি পুনরায় চালু করা art এই পদ্ধতির কিছু পরিষেবার জন্য অগ্রহণযোগ্য হতে পারে (উদাহরণস্বরূপ উচ্চ থ্রুপুট এবং উচ্চ পরিষেবা-ধারাবাহিকতা প্রয়োজনীয়তা সহ একটি ওয়েব সার্ভার)


2
আপনি কি জানেন যে অ্যাপ্লিকেশনগুলি সংযোজন করা হচ্ছে তাদের কী ঘটে?
আদম মাতান

1
আসুন একটি সাধারণ ওপেন ফাইল হ্যান্ডলার ধরে নিই যা লাইনগুলিকে সংযোজন করে এবং এখন থেকে পরে ফ্লাশ করে।
আদম মাতান

1
আমি সেডের চারপাশে আমার উপায় জানি, এবং একটি নতুন ফাইলে লাইনগুলি বের করা সেডের সাথে কোনও মস্তিষ্কের নয়। সমস্যাগুলি হ'ল এটি সমস্ত একই ফাইলে রাখা।
আদম মতান

10
না, এটি কাজ করা উচিত নয়। সম্পাদিত সামগ্রী সহ sed -iএকটি নতুন ফাইল তৈরি করে এবং পুরানোটি সরিয়ে ফেলা হয় যাতে আপনি সক্রিয় ফাইলটি সম্পাদনা করছেন না: $ ls -i --- 6823554 testfile --- $ sed -i 's/test/final/' testfile --- $ ls -i --- 6823560 testfile------ দয়া করে কীভাবে sed -iকাজ করে তা পরীক্ষা করে দেখুন । কেন এই ভুল উত্তরে এত উত্সাহ দেওয়া হয়েছে?
পাবউক

1
প্রশ্নটি "একটি অ্যাপ্লিকেশন দ্বারা সক্রিয়ভাবে সংযোজন করা হচ্ছে এমন একটি লগ থেকে" বলা হয়েছে। অপারেটিভ শব্দটি "সক্রিয়ভাবে"। আপনার উত্তর হাজির হওয়ার পরে সম্ভবত সেই ব্যাখ্যাটি যুক্ত করা হয়েছিল। তবে এটি যেমন দাঁড়িয়ে আছে, পাঠকরা যারা "সর্বাধিক উন্নতির" দিকে ঝুঁকছেন তারা বিভ্রান্ত হবে। আমি কেবল একবার ডাউনভোট করতে পারি
স্কট প্রিভ

5

লগ ফাইলের বৃদ্ধির এই জেনেরিক সমস্যার সমাধান হ'ল লগ রোটেশন। এটিতে নিয়মিত (রাত্রে বা সাপ্তাহিক, সাধারণত) কোনও বিদ্যমান লগ ফাইলকে অন্য কোনও ফাইলের নামে সরিয়ে নেওয়া এবং খালি লগ ফাইল দিয়ে নতুন করে শুরু করা জড়িত। একটি পিরিয়ড পরে পুরানো লগ ফাইলগুলি ফেলে দেওয়া হয়।

দেখুন: http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm


2

এটি কোনও উত্তর নয়, কোনও সমাধান নয়। প্রশ্নের কোনও সমাধান নেই। প্রশ্নকর্তা স্পষ্টভাবে বলেছেন: " একটি অ্যাপ্লিকেশন দ্বারা সক্রিয়ভাবে সংযোজন করা লগ থেকে "। আপনি আরও বোঝার জন্য পড়তে পারেন এবং এই কোডটি কেন লগিংয়ের সেরা অনুশীলনগুলি অনুসরণ করে না তা আমার অনুমানের ভিত্তিতে করা একটি পরামর্শের জন্য শেষ পর্যন্ত যেতে পারেন ।

পরিষ্কার হতে: অন্যান্য "উত্তর" এখানে মিথ্যা প্রতিশ্রুতি দেয় । নতুন নামকরণের কোনও পরিমাণই অ্যাপ্লিকেশনটিকে নতুন ফাইলটি ব্যবহার করে চালিত করবে না। সবচেয়ে দরকারী তথ্য এই ভুল উত্তর দেওয়া মন্তব্যে সমাহিত করা হয়।

অ্যাক্টিভ ফাইলগুলি কোনও ধরণের ধারক নয় যা আপনি কেবল ডেটা .োকান। একটি ফাইলের নাম একটি আইনোডকে (ফাইলের শুরু) নির্দেশ করে এবং প্রতিটি ইনোডের অন্য আইনের একটি পয়েন্টার থাকে (যদি আরও ডেটা থাকে)। এর অর্থ এটি একটি নিয়মিত লিখিত টু ফাইলটিতে আইওনড যুক্ত হওয়ার একটি ধ্রুব স্ট্রিম থাকে এবং আপনি একটি "ফাইল" কী মনে করেন তা আসলে ইনোডের লগ অনুক্রম।

ভাবুন আপনি গুগল ম্যাপে কাউকে ট্র্যাক করছেন এবং সেই ব্যক্তি বিশ্বের যে কোনও জায়গায় যে কোনও সময় টেলিপোর্ট করতে পারে এবং আপনি এই বিন্দুগুলিকে সংযুক্ত করার চেষ্টা করছেন were

লিনাক্স সরঞ্জাম "ট্রানসেট" ফাইলের শেষে তথ্যটি বাতিল করতে পারে, কেবল ইনোড ট্রিটি হাঁটার মাধ্যমে এবং (যে অবস্থান / আকারে আপনি মনোনীত করেন) এটি স্ট্যাকের পরবর্তী সমস্ত পয়েন্টারগুলি ফেলে দেবে। বিপরীত কাজটি করার জন্য - ফাইলের শুরুতে ডেটা ফেলে দিন - রিয়েল-টাইমে ইনোড ট্রিটি পুনরায় লেখার এমন ভয়াবহ জটিল এবং ঝুঁকিপূর্ণ প্রক্রিয়া হবে যে জনসাধারণের জন্য এই জাতীয় সরঞ্জামগুলি কেউ লিখবে না, কারণ তারা প্রায়শই ব্যর্থ হয় এবং নেতৃত্ব দেয় তথ্য ক্ষতি Inodes উইকি ছোট কিন্তু এই ধারণার কিছু ব্যাখ্যা করে।

** আমার পরামর্শ: এই সমস্যাটি প্রায় ঘুরিয়ে ফেলুন - কেন এই অ্যাপ্লিকেশনটি এভাবে আচরণ করছে? অনেকগুলি লগিংয়ের সেরা অনুশীলন রয়েছে তবে প্রায়শই সেগুলি আপনার লগিং সিস্টেমটি আসলে (সিসলগ, ইত্যাদি) এর সাথে আবদ্ধ থাকে। মূলত, একটি অ্যাপ্লিকেশনটি এটি ফাইলের হ্যান্ডেলটিকে "রিলিজ" করবে বলে আশা করা হচ্ছে, সুতরাং লোগ্রোটেট (ইত্যাদি) পুরানো ডেটার আরও প্রক্রিয়াকরণ পরিচালনা করতে পারে।

আমি যখনই "অ্যাক্টিভ লগফাইলে" শুনি তখনই আমি সেই ব্যক্তিকে এই অ্যাপ্লিকেশনটির পিছনে "বিশেষ গল্প" বলতে বলি tell সাধারণত এটি "বিকাশকারী ছেড়ে যান, এবং আমরা কোডটি পরিবর্তন করতে পারি না This এটি আসলে সুরক্ষার বিপরীতমুখী, এটির নিজস্ব ঝুঁকির একটি সেট রয়েছে But তবে আমি আপনাকে এমন একটি সমাধান চাই যা উত্স কোডটি স্পর্শ করা এড়ায় want এটি যদি হয় কেস, আরও নির্দিষ্ট প্রশ্ন প্রয়োজন।


0

উত্সাহ পাঠ্যে খোলার লাইনগুলি মুছে ফেলা এবং ফাইলটি সংরক্ষণ করা কোনওভাবে কাজ করে, এমনকি যদি ফাইলটি সংযুক্ত হয়ে যায় তবে আমি একটি কমান্ড-লাইন সমাধানের সমাধানটি অনুসন্ধান করতে এসেছি, তাই আমি কেবল এখানে এই কার্যকরী তবে অকেজো সমাধানটি রেখে যাব !!


-1

হতে পারে অনুলিপি, ছাঁটাই, কপিটি আবার আকার = 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


"একটি অ্যাপ্লিকেশন দ্বারা সক্রিয়ভাবে সংযোজন করা হচ্ছে এমন লগ থেকে"। আপনার সমাধানটি যে সমস্যার মুখোমুখি হয় তা হ'ল লগফাইলটি "স্থায়ীভাবে" অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় - যার অর্থ লগফিলের ইনোডটি খেলতে থাকে। আপনার সমাধানটি লগফাইলে ডেটাটিকে "ব্যাক আপ" দেয় না, যা এই প্রশ্নের বাইরেও থাকতে পারে।
স্কট প্রিভ

আপনার মন্তব্য এবং ডাউন ভোটের জন্য ধন্যবাদ? খাবারের জন্য খাদ্য হিসাবে আমি একটি সস্তা সস্তা উদাহরণ সংশোধন করেছি আপনার পরিস্থিতি সম্পর্কে আপনাকে আরও গভীরভাবে চিন্তা করতে হবে, তবে যেখানে ইচ্ছা সেখানে উপায় আছে।
মাস্টার জেমস

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

1
অনুমান করার জন্য ঠিক দুঃখিত। হ্যাঁ ইনোডকে একইভাবে থাকা দরকার সেই কারণেই প্রদত্ত উদাহরণ / প্রমাণটি ট্র্যাঙ্কেট ব্যবহার করে এবং আবার এটি পরিস্থিতির উপর নির্ভর করে (সকলের জন্য বিকল্পগুলি স্পষ্টতই সরল সাইটে লুকিয়ে রয়েছে)।
মাস্টার জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.