লোগ্রোটেট আর শিকড়ের মালিকানা না পাওয়ার কারণে সিমলিঙ্কযুক্ত কনফিগারেশন ফাইলটি আর পড়বে না


15

আমরা বর্তমানে রেল অ্যাপ্লিকেশন সার্ভারগুলিতে আমাদের রুবিতে উবুন্টু 12.04 এলটিএস থেকে 14.04 এলটিএসে আপগ্রেড করছি এবং লক্ষ্য করেছি যে লগ ফাইলগুলি আর ঘুরছে না।

উভয়ই মেশিনে /var/app-name/config/logrotateআমাদের ইউনিক্স ব্যবহারকারীর মালিকানাধীন একটি ফাইল deployerরয়েছে যার মধ্যে বৈধ লোগ্রোটেট ফাইল রয়েছে:

/var/app-name/log/*.log {
  daily
  rotate 365
  delaycompress
  compress
  dateext
  dateformat -%Y%m%d
  missingok
  copytruncate
}

এটি তখন /etc/logrotate.d/ডিরেক্টরিতে অনুরূপভাবে যুক্ত হয়app-name

আমাদের উবুন্টু 12.04 সার্ভারে আমাদের লোগ্রোটেট 3..7.৮ রয়েছে যা ঠিক আছে। এটি var/app-name/log/ডিরেক্টরিতে যায় এবং সমস্ত লগ ফাইল আবর্তিত করে

তবে উবুন্টু 14.04 সার্ভারে আমাদের লোগ্রোটেট 3..৮..7 রয়েছে যা আমাদের অ্যাপ্লিকেশনটির জন্য লগ ফাইলে ঘোরান না।

যখন আমি এটির মাধ্যমে ডিবাগ sudo logrotate -d -f /etc/logrotate/.confকরি আমি নিম্নলিখিত আউটপুটটি পাই:

Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).

কোডটিতে এটি অনুসরণ করে, মনে হয় এই পরিবর্তনটি 3.8.x প্রকাশের স্ট্রিমের জন্য যুক্ত করা হয়েছিল: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526

যদি আমি পরিবর্তন ফাইলের মালিকানা সিমলিঙ্ক করার /var/app-name/config/logrotateজন্য rootতারপর, এটা আবার কাজ করতে শুরু করে। তবে প্রদত্ত এই ফাইলটি আমার আবেদনের অংশ, এবং আমরা এই রাজ্যে যে ক্যাপিস্ট্রানো ডিপ্লোয়মেন্ট ফ্রেমওয়ার্ক ব্যবহার করি তা তৈরি করে, আমি বরং এর মালিকানা পরিবর্তন করতে হত না, যখন এটি ঠিক কাজ করত।

তাহলে কি লিমরোট দ্বারা সমর্থিত কনফিগার ফাইলগুলি প্রস্তাবিত / সমর্থিত হয়?

এবং যদি তাই হয়, তবে এটি ডিরেক্টরিতে deployerসিমলিংকযুক্ত আমার ফাইল (মালিকানাধীন ) ব্যবহার করতে অস্বীকার করা উচিত, তা /etc/logrotate.dবাগ হিসাবে দেখা উচিত?

বা অ্যাপ্লিকেশন-নির্দিষ্ট লগ রোটেশনের জন্য আরও একটি প্রস্তাবিত পদ্ধতির রয়েছে?

( ইউনিক্স স্ট্যাক এক্সচেঞ্জে জিজ্ঞাসা করা )


ভাল প্রশ্ন! আমি দেখতে পাচ্ছি যে uid == 0 এর পরিবর্তে ব্যবহারকারীর নাম "রুট" এর বিরুদ্ধে চেক করার বিষয়ে পরে কিছু আলোচনা হয়েছিল, তবে এটির কেন রুটের মালিকানা প্রয়োজন তাও প্রশ্নটি ট্রিগার করতে পারেনি।
agtoever

উত্তর:


6

সমস্যাটি হ'ল লোগ্রোটেট কনফিগারেশন ফাইলটি রুট হিসাবে যে কোনও কমান্ড চালাতে পারে (প্র্রোটেট / পোস্ট্রোটেট স্ট্যানজ ব্যবহার করে)। অতএব, আপনি কার্যকরভাবে deployerএটিকে ফাইলগুলিতে লেখার অ্যাক্সেস দিয়ে আপনার ব্যবহারকারীকে মূল সুবিধা দিচ্ছেন /etc/logrotate.d/। সুতরাং না, এটি কোনও বাগ নয়।

আপনি যদি আপনার ডিপ্লোয়ার ব্যবহারকারীকে বিশ্বাস করেন, তবে আমি অনুমান করি যে আপনি ফাইলটিকে অনুলিপি করার জন্য sudo অধিকার দিয়ে সমস্যার সমাধান করতে পারেন /etc/logrotate.d/। অবশ্যই ধরে নেওয়া, ডিপ্লোয়ায়ার ব্যবহারকারী সেই একই ব্যবহারকারী নন যে ওয়েব অ্যাপটি চলছে।


আমাদের পদ্ধতির ক্ষেত্রে অ্যাপ্লিকেশনের বাইরের ডিরেক্টরি থেকে অ্যাপ্লিকেশন ফাইলগুলিতে সিমলিংক পছন্দ করা ছিল, যেমন প্রতিটি মোতায়েন করে কেবল নতুন অ্যাপ্লিকেশনই নয়, তবে কোনও কনফিগারেশন ফাইলের পরিবর্তনও রয়েছে। এমনকি ডিপ্লোয়ারকে অ্যাপ্লিকেশন ডিরেক্টরিটির বাইরের কোড মোতায়েনের অধিকার প্রদান করা এই পদ্ধতির লঙ্ঘন করে - তবে সমানভাবে কোনও অ্যাপ্লিকেশন ফাইলকে মালিকানাধীন পোস্ট-ডিপ্লোয় করার জন্য আবদ্ধ করে রাখাও একটি খারাপ জিনিস (টিএম) বলে মনে হয়। সম্ভবত আসল পদ্ধতির ফলে লোগ্রোটেট ৩.৮.০++ নিয়ে আর কাজ করা যাবে না
ফ্যান্টমওহলে

2
@ ফ্যান্টমওহলে আপনার আসল পদ্ধতির স্পষ্টতই আপনার স্থাপনা ব্যবহারকারীকে সম্পূর্ণ রুট সুবিধাদি দেওয়া হয়েছে। লোগ্রোটেট ৩.৮ এ এটি নতুন নয়। কনফিগার আপডেটটি আপডেট করার সময় আপনি যদি ডিপ্লোয়ারের অধিকারগুলি সীমাবদ্ধ করতে চান তবে আমার মনে হয় আপনার লোগ্রোটেট ব্যতীত অন্য কিছু ব্যবহার করা উচিত।
pelle

2

আমি বুঝতে পেরেছি যে আমি পার্টিতে একদম দেরি করেছি, তবে আমার একই রকম সমস্যা ছিল এবং আমি ভেবেছিলাম যে আমি আমার সমাধান ভাগ করে নেব।

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

প্রথমে আমি logrotateমোতায়েনকারী ব্যবহারকারী হিসাবে চালানোর চেষ্টা করেছি , তবে এটিতে রাষ্ট্র ফাইলটিতে অ্যাক্সেস থাকার অভিযোগ ছিল /var/lib/logrotate/state। তারপরে আমি ম্যান পেজটি পড়ি। আপনি যে রাষ্ট্র ফাইল logrotateব্যবহার করেন তা নির্দিষ্ট করতে পারেন ! সুতরাং, logrotateকাস্টম রাষ্ট্র ফাইলের সাথে ব্যবহারকারীর ব্যবহারকারী হিসাবে কার্যকর করতে একটি দৈনিক ক্রোন সেটআপ করা আমার কাছে আরও ভাল সমাধান বলে মনে হয়েছিল । এইভাবে, ব্যবহারকারী ব্যবহারকারী বা অ্যাপ্লিকেশন দ্বারা কোনও রুট অ্যাক্সেসের প্রয়োজন নেই।

আপনি এখানে রাষ্ট্র ফাইলটি কীভাবে নির্দিষ্ট করবেন:

logrotate --state /path/to/status /path/to/custom_logrotate.conf

আপনার পছন্দ মতো কোনও ব্যবহারকারী এবং কনফিগারেশনের মালিক হিসাবে আপনি লোগ্রোটেট চালাতে পারেন!

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