লোগ্রোটেট সরানোর পরে কীভাবে কোনও ফাইলে স্টডআউটকে পুনঃনির্দেশিত করা চালিয়ে যেতে হবে?


22

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

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

আমি এই পোস্টটিও পেয়েছি যা আমার মতো একই সমস্যা ছিল এবং দাবি করে যে আউটপুট পুনর্নির্দেশের >>পরিবর্তে এটি ব্যবহার করে এটি ঠিক করা যেতে পারে >। আমি তার সমাধানটি পরীক্ষা করেছিলাম তবে এটি আমার পক্ষে কার্যকর হয়নি। পুনর্নির্দেশের কাজটি কীভাবে রাখা যায় তার কারও কি ধারণা আছে?


4
আমি এখনও আপনার ক্ষেত্রে, ">" এর পরিবর্তে ">>" ব্যবহার করার পরামর্শ দিচ্ছি যদি আপনি কোনও সঙ্কুচিত ফাইলটিতে লিখতে চান: ">>" হিসাবে অ্যাপেন্ড মোডে খোলা থাকে, এটি ফাইলের শেষ অবধি চেষ্টা করবে প্রতিটি সময় এটি লিখতে। এইভাবে, আপনি যখন ফাইলটি কেটে ফেলবেন (এটি এএক্সএক্সএক্সএক্স বাইট থেকে 0 বাইটে যেতে হবে), এটি "শেষ অবধি" অনুসন্ধান করবে, সুতরাং এটি এখন বাইট 0 পরে লিখতে হবে তা জানতে পারবে নাহলে এটি বাইট XXXX এর পরে লিখতে পারে এবং এভাবে এর আগে XXXX নাল বাইটের সাহায্যে একটি স্পার ফাইল তৈরি করুন (অর্থাত্, যখন ">", fd ফাইলের আকারটি সঙ্কুচিত না করে কেবল এটি মনে করতে পারে এবং সেখান থেকে লিখতে পারে!)
অলিভিয়ার ডুলাক

উত্তর:


25

এই লগ ফাইলের জন্য আপনার লোগ্রোটেট কনফিগারেশনে আপনার কপিরআরঙ্ক্টেট নির্দেশিকা ব্যবহার করা উচিত।

copytruncate পুরানো লগ ফাইলটি সরানো এবং aচ্ছিকভাবে একটি নতুন একটি তৈরি করার পরিবর্তে একটি অনুলিপি তৈরির পরে মূল লগ ফাইলটি ছাঁটাই করুন। এটি ব্যবহার করা যেতে পারে যখন কোনও প্রোগ্রামকে তার লগফিল বন্ধ করতে বলা না যায় এবং এভাবে চিরকাল পূর্ববর্তী লগ ফাইলটিতে লেখা (সংযোজন) চালিয়ে যেতে পারে might নোট করুন যে ফাইলটি অনুলিপি করা এবং এটি কেটে ফেলার মধ্যে খুব অল্প সময়ের স্লাইস রয়েছে, যাতে কিছু লগিং ডেটা হারিয়ে যেতে পারে। এই বিকল্পটি ব্যবহার করা হলে, পুরানো লগ ফাইলটি স্থানে থাকায় তৈরি বিকল্পটির কোনও প্রভাব পড়বে না


2
উল্লেখযোগ্য হতে পারে: অল্প সময়ের জন্য, compressঅপারেশনের আগে , ডেটা নকল করা হয়। এটি আমাদের একবার সমস্যা তৈরি করেছিল কিন্তু এটি আমাদের খারাপ কারণ lvস্থানের সীমাটির আমাদের কাছে হওয়া উচিত ছিল না । manস্নিপেটে যেমন বলা হয়েছে , আপনি অনুলিপি এবং কাটা কাটা কাজের মধ্যে কিছু লগ ডেটা হারাতে পারেন।
বেলমিন ফার্নান্দেজ

6

বিকল্প হিসাবে, আপনি এটিও করতে পারেন:

  • নিবেদিত সুবিধা (যেমন স্থানীয় 5) দিয়ে পাইপিংয়ের পরিবর্তে আপনার স্ক্রিপ্টে লগার ইউটিলিটিটি ব্যবহার করুন, উদাহরণস্বরূপ:

    logger -p local5.info -t myscriptname "this is some log data"

  • চাইলে লগ ফাইলের জন্য এই সুবিধাটি লেখার জন্য সিসলগকে কনফিগার করুন, উদাহরণস্বরূপ (rsyslog.conf):

    local5.* /var/log/mylogfile

  • এই লগের জন্য লগরোট নিয়ম সেটআপ করুন।


এটি কেবল তখনই কাজ করে যদি আপনার কাছে সুস্পষ্ট আউটপুট কমান্ড থাকে echo। তৃতীয় পক্ষের সরঞ্জামগুলির আউটপুট যা স্ক্রিপ্ট থেকে ডেকে আনা হয় এবং কিছু আউটপুটও এভাবে লगरকে পুনঃনির্দেশিত করা যায় না
ড্যানিয়েল অল্ডার

4

আয়েন সমাধানের আরেকটি বিকল্প হ'ল postrotateএকবার ঘোরার পরে আপনার স্ক্রিপ্টটি পুনরায় চালু করতে স্ক্রিপ্ট ব্যবহার করা । এটি প্রচুর পরিমাণে ডেমনগুলির জন্য করা হয় (ডেমোন পুনরায় চালু করুন বা পুনরায় লোড করুন), তবে আপনার স্ক্রিপ্টটি না জেনে আমি জানি না এই সমাধানটি আপনার পক্ষে উপযুক্ত হবে কি না (আপনার স্ক্রিপ্টটি কিছুক্ষণ আগে উত্পন্ন কিছু রাজ্যের উপর নির্ভর করে?)।

এর উপাদানসমূহ /etc/logrotate.d/your-script-name:

/var/log/your-script-name.log {
    # your current logrotate options
    ...
    postrotate
        # this supposing you have the current pid stored
        cat /run/your-script-name.pid | xargs -r kill
        #relaunch it again
        /usr/local/bin/your-script-name
    endscript
}

0

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

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