লোগ্রোটেশনে লগ ফাইলগুলি পুনরায় খোলার জন্য আপস্টার্ট


10

আমরা আমাদের উবুন্টু সার্ভারগুলিতে পরিষেবাগুলি পরিচালনা করতে আপস্টার্ট ব্যবহার করি। তারা /var/log/upstart/SERVICE_NAME.log এ লগ আউট হওয়া লগগুলি তৈরি করে

তারপরে প্রতিদিন, লগ ফাইলগুলি লোগ্রোটেশন স্ক্রিপ্ট ব্যবহার করে ঘোরানো হয় যা 12.04 এলটিএস সহ আসে:

/var/log/upstart/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}

সমস্যাটি হ'ল লোগ্রোটেট ফাইলগুলি সরিয়ে রাখার সময়, এটিগুলি আপস স্টার্টগুলি ফাইলগুলি বন্ধ এবং পুনরায় খুলতে সিগন্যাল বলে মনে হয় না, আপসার্ট প্রসেসটি একটি মোছা পিআইডি-তে লেখা থাকে।

init          1       root    8w      REG              202,1        64       2431 /var/log/upstart/dbus.log.1 (deleted)
init          1       root   13w      REG              202,1        95       2507 /var/log/upstart/acpid.log.1 (deleted)
init          1       root   14w      REG              202,1       127      17377 /var/log/upstart/whoopsie.log.1 (deleted)
init          1       root   36w      REG              202,1       122       6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init          1       root   37w      REG              202,1        30       6762 

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


আমি সবেমাত্র এটির মুখোমুখি হয়েছি। এটি খুব আশ্চর্যের বিষয় আমরা এর আগে এটি লক্ষ্য করি নি, যা আমার মনে করে যে এটি সম্ভবত সাম্প্রতিক জিনিস হতে পারে।
প্যাভেলার

1
এ সম্পর্কে কোন আপডেট? 14.04 এ ঠিক একই সমস্যাটি দেখছেন। এটি কারণ nocreateনির্দেশের কারণে, নিশ্চিত নয় যে কেন কেউ এই নির্দেশনাটি ব্যবহার করবেন, বিশেষত পরিষেবাগুলির জন্য যা সম্ভাব্যভাবে
প্রচুর

এছাড়াও এটি অভিজ্ঞতা।
Ztyx

উত্তর:


2

আমি বিশ্বাস করি আপনার কাছে 3 টি বিকল্প রয়েছে।

  1. আপনি "কপিরাইটআরঙ্কেট" যোগ করে বিদ্যমান কনফিগারেশনটি সংশোধন করুন

    /var/log/upstart/*.log { copytruncate daily missingok rotate 7 compress notifempty nocreate }

  2. অন্য লগ ফাইলগুলি ক্ষতিগ্রস্থ হয় না এবং বিদ্যমান কনফিগারেশনের কারণে আপনি যদি বিদ্যমান লোগ্রোটেট কনফিগারেশন পরিবর্তন করতে বা (অনুমতিপ্রাপ্ত না) করতে না পারেন, তবে আপনার "SERVICE_NAME.log" ফাইলগুলিকে / এর অধীনে একটি নতুন ফোল্ডারে সরান / var / লগ যদি আপনার ইচ্ছা হয় তবে "copytruncate" দিয়ে একটি নতুন কনফিগারেশন তৈরি করুন এবং এটি ক্রোন.ডাইলে যুক্ত করুন।

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

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

কীভাবে ম্যানুয়ালি লোগ্রোটেট চালাবেন এবং এটি আপনার প্রোগ্রামে বা স্ক্রিপ্টে যুক্ত করতে কেবল টাইপ করুন:

man logrotate

অথবা

logrotate --help

আপনি যদি আপনার প্রোগ্রামগুলির জন্য পাইথন ব্যবহার করে থাকেন তবে আপনি পরীক্ষা করতে পারেন যে এই প্রোগ্রামটি এর লগ ফাইলগুলিকে স্ব-পরিচালনায় এটি কীভাবে ব্যবহার করে। http://bazaar.launchpad.net/~ferncasado/keep.awake/trunk/files/head:/v4/


0

দেখা যাচ্ছে, এটি একটি পরিচিত সমস্যা এবং আমি এটি টাইপ করার সাথে সাথে টিকিট খোলা থাকবে।

সঠিক জিনিসটি হ'ল, সম্ভবত /etc/logrotate.d/upstartপুরোপুরি সরিয়ে ফেলা এবং পৃথকভাবে পৃথক পরিষেবাদির ফাইলগুলি ঘোরানো। কারণ ডিরেক্টরিতে ( /var/log/upstart/) বিভিন্ন পরিষেবার কেবলমাত্র stdout / stderr রয়েছে - এবং ডেমন হিসাবে চালিত কোনও পরিষেবা সে দুটি চ্যানেলে মোটামুটি আউটপুট করা উচিত নয়। বাদে, সম্ভবত, খুব শুরুতে।

সিস্টেম আমি পরিচালনার করছি উপর, তিন ভুঁইফোড় দ্বারা চালানো হয়: php5.6-fpm, php7.1-fpm, এবং acpid। তিনটি লগের কোনওটিই সক্রিয় নয় তবে কখনও কখনও এফএমপি এর মূল লগ-ফাইল ( /var/log/php5.6-fpm.log) ঘোরার কারণে পুনরায় চালু করা হয় - এবং এটি এই শোরগোলের কারণ হয়, কারণ এটি প্রারম্ভকালে কিছুটা বৌদ্ধিকতা আউটপুট করে।

যদি আপনি এই ফাইলগুলি যেভাবেই ঘোরানোর জন্য জোর দিয়ে থাকেন তবে আপনি এই বিষয়ের উপর নির্ভর করতে পারেন যে তাদের নামগুলি পরিষেবার নামের সাথে মেলে এবং নিম্নলিখিত postrotateস্ক্রিপ্টটি ব্যবহার করুন :

    postrotate
            service=${1##*/}
            service=${service%.log*}
            service $service restart > /dev/null
    endscript

উপরের কাজ করার জন্য, সেখানে ক্রিয়াটি ব্যবহার করবেন না তা নিশ্চিত করুন sharedscripts- আমার স্ক্রিপ্টলেটটি নির্ভর করে, ফাইলটির আসল পথটি এটি প্রথম আর্গুমেন্ট ( $1) হিসাবে পাস করবে ।

(এর মধ্যে পুনঃনির্দেশটি /dev/nullদরকারী, কারণ- serviceشورবিত শব্দটি হ'ল - এবং আপনি ক্রোন দ্বারা এই ধরণের শব্দ আপনাকে ই-মেইল করতে চান না Notice লক্ষ্য করুন, আমি stderrসেখানে পুনঃনির্দেশ দিচ্ছি না stdout- কেবল যদি কোনও সমস্যা হয় তবে আপনি এটি সম্পর্কে আপনার ইমেলটি এখনও পাবেন)

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