ইউজারস্পেস প্রোগ্রামগুলি কোথায় তাদের লগগুলি সংরক্ষণ করার কথা?


23

আমি একটি স্ক্রিপ্ট লিখছি যা আমি সুযোগ ছাড়াই চালাতে চাই। আমি স্ক্রিপ্টের সাথে যে ত্রুটিগুলির মুখোমুখি হতে চাই তা কোনও লগ ফাইলে লগ হতে চাই। একটিতে লেখার সুযোগ আমার নেই /var/log। এবং আমি আমার হোম ডিরেক্টরিতে একটি রাখতে চাই না।

এমন কোনও অবস্থান রয়েছে যেখানে ইউজারস্পেস স্ক্রিপ্টগুলি রানটাইম তথ্য লগ করতে পারে? /var/logকোনও সম্ভাব্য সুরক্ষা সমস্যা না তৈরি করে আমার স্ক্রিপ্ট লগের তথ্য পাওয়ার সেরা অনুশীলন কোনটি ? আমি স্ক্রিপ্টে ইউআইডি / গিড সেট করতে দ্বিধা বোধ করছি।

উত্তর:


8

আপনি সাধারন ব্যবহারকারী হিসাবে / var / লগতে লিখতে পারবেন না, তবে যদি জিজ্ঞাসা করেন তবে সিসলোগ ডেমন এটি আপনার জন্য করবে। যদি আপনি স্ট্যান্ডার্ড সিস্টেম লগগুলিতে বার্তা লগ করতে চান (উদাঃ /var/log/syslog), loggerআপনার সিস্টেমে 4.4BSD ইউটিলিটি উপলব্ধ থাকতে পারে available এটি ডিবিয়ানে ডিফল্টরূপে ইনস্টল করা আছে এবং bsdutilsএটি ডেবিয়ান ডেরিভেটিভসের প্যাকেজে রয়েছে।

সিস্টেম লগগুলি পড়ার সুযোগ সুবিধাগুলির অসুবিধাগুলি এবং আপনার স্ক্রিপ্টের বার্তাগুলি অন্যান্য প্রোগ্রামের বার্তাগুলির সাথে মিশ্রিত করার কোনও প্রাক-বিদ্যমান লগ রোটেশন, রক্ষণাবেক্ষণ এবং পর্যবেক্ষণ সরঞ্জামগুলির সুবিধা পাবেন ।

$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye

বিভিন্ন কনফিগারেশন বিকল্প উপলব্ধ; আপনি আরও পড়তে পারেন man logger


এই ইউটিলিটি জন্য ভাষা বাঁধাই আছে? বরং স্ট্যান্ডআউটের প্রতিটি লাইনের জন্য অ্যাপ্লিকেশন উপ-প্রক্রিয়াগুলি স্প্যান করবে না।
থারস্ম্মোনার

@ থারস্মমনার: গিলসের উত্তর syslogযেমন বলেছে, এটি একটি সি লাইব্রেরি রুটিন এবং সি ++ ব্যবহার করে যে কোনও সি কল করতে পারে extern "C"। অন্যান্য ভাষাগুলি প্রায়শই সি যেকোন কিছুতে জেনেরিক বাঁধাই সরবরাহ করে বা নির্দিষ্ট জিনিসের সাথে বাঁধাই সরবরাহ করে তবে এটি ভাষার উপর নির্ভর করে।
dave_thompson_085

12

আপনি যদি কোনও সাধারণ ব্যবহারকারী হিসাবে কোনও প্রোগ্রাম চালানোর সিদ্ধান্ত নেন তবে লগের প্রাকৃতিক জায়গাটি আপনার হোম ডিরেক্টরিতে রয়েছে। আপনার হোম ডিরেক্টরি আপনার সমস্ত ফাইল সংরক্ষণ করার জন্য বোঝানো হচ্ছে, সেগুলি আপনি চালিত কোনও প্রোগ্রামের লগ বা অন্য যে কোনও কিছুই নয়।

প্রোগ্রামটি যদি সিস্টেমের অংশ হিসাবে চালিত হয়, সাধারণত উত্সর্গীকৃত সিস্টেম ব্যবহারকারী হিসাবে চলতে থাকে তবে তার লগগুলির জন্য প্রাকৃতিক জায়গাটি এতে রয়েছে /var/log। একটি উপ-ডিরেক্টরি তৈরি করুন /var/log/myappএবং উপযুক্ত অনুমতি দিন যাতে আপনার অ্যাপ্লিকেশনটি সেখানে লিখতে পারে।

যদি প্রাসঙ্গিক হয় এবং আপনার অপারেটিং সিস্টেম এটির অনুমতি দেয় তবে লগ ফাইলটিকে কেবলমাত্র পরিশিষ্ট হিসাবে চিহ্নিত করুন। শুধুমাত্র রুট এটি করতে পারে। এর সুবিধা রয়েছে যে আপনার অ্যাপ্লিকেশনটি যদি আপস করা হয় তবে এটি অতীতের লগগুলি মুছতে সক্ষম হবে না, যা আপসটির ফরেনসিক বিশ্লেষণের জন্য খুব দরকারী। লগটি ঘোরানোর জন্য আপনার রুটের হস্তক্ষেপের প্রয়োজন হবে: chownযাতে লগ ফাইলটি আর অ্যাপ্লিকেশন, renameলগ ফাইল দ্বারা আর খোলা না যায়, উপযুক্ত মালিকানা সহ একটি নতুন অ্যাপেন্ড-কেবল ফাইল তৈরি করতে পারে, তারপরে নতুন খালি ফাইলটি খুলতে অ্যাপ্লিকেশনকে অবহিত করুন ।

আপনি যে কোনও অ্যাপ্লিকেশন লগ করতে logger(1)বা কল করে সিস্টেম লগগুলিতে লগ করতে পারেন syslog(3)


4

সাধারণত ডেমনের জন্য লগ ফাইলটি তৈরি করা হয় rootতারপরে অনুমতিগুলি পরিবর্তন করা হয় যাতে অননুমোদিত ব্যবহারকারী এতে লিখতে পারে। logrotateতারপরে আবর্তনের সময় অনুমতি সংরক্ষণের জন্য সেট আপ করা হয়।

যদি এটি কোনও কমান্ড না, ডেমন হয়, তবে লগ ইন করুন /tmp(সর্বাধিক ব্যবহার করে mktemp) এবং STDOUTলগটি কোথায় গিয়েছিল তা ব্যবহারকারীকে জানান inform


ভাল ধারণা. আমার ~ /। প্রোফাইলে আমার কয়েকটি লাইন রয়েছে যা ড্রপবক্স রাক্ষসটি চলছে কিনা তা পরীক্ষা করে এবং এটি না হলে এটি শুরু করে। &প্রম্পটটি ধরে রাখা এড়াতে আমি যুক্ত করার কথা ভাবছিলাম , তবে ড্রপবক্স শুরু করে কনসোলে লিখতে থাকে। আমি বর্তমানে এটির আউটপুট পুনর্নির্দেশ করছি /dev/null, তবে ড্রপবক্স শুরু করতে ব্যর্থ হলে ডিবাগ করার কিছু উপায় থাকতে চাই।
লর্ড লোহ

1
চেক আউট daemonize
বাহামত

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

উন্নত অধীনে প্রথমেই / var / tmp, / tmp হয় না একটি বুট বেঁচে থাকার জন্য নিশ্চিত।
ভনব্র্যান্ড

@ লর্ডলাহ: হ্যাঁ, সাথে chmod। সাধারণত 0644বা 0664এবং ব্যবহারকারীর / গোষ্ঠীর মালিকানা ডিমনটির পরিবর্তিত হয় যা এটি লেখা হয় it
বাহামত

3

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

আমি যদি তাদের জন্য একটি নির্দিষ্ট জায়গা থাকে তবে আমি পছন্দ করব, আমি তাদের সিস্টেমে তাদের জন্য একটি স্থিতিশীল জায়গা খোঁজার চেষ্টা করছি playing

আমার প্রথম ধারণাটি ব্যবহার করা ছিল /var/run/user/$UID/log, কিন্তু আমার সিস্টেমে এটি টিএমপিএফএস মাউন্ট, যথেষ্ট বড় নয়, বা লগ সহ ব্যবহারের জন্য সত্যই ভাল found

তাদের জন্য একটি জায়গা তৈরি করুন

যেহেতু আমি / var / run / ব্যবহারকারীর সাথে এটির সংহত করার পক্ষে যথেষ্ট বুঝতে পারি না, তাই 1000 ব্যবহারকারীর জন্য আমি এটি হাতে হাতে অনুকরণ করতে বেছে নিয়েছি।

# mkdir /var/log/user
# install -d /var/log/user/1000 --owner 1000 -g 1000 -m 0700

আমি এই ফোল্ডারটির মধ্যে কাঠামোর জন্য এফএইচএস / ভেরি / লগ এসপিকে লেগে থাকার পরামর্শ দিচ্ছি, তবে ফ্যাক্স ফ্রি-ফর্ম তাই মেনে চলার মতো খুব বেশি কিছু নেই।

লোগ্রোটেট কনফিগার করুন

আপনার সিস্টেম দ্বারা সরবরাহিত এই ডিরেক্টরিতে কোনও বিদ্যমান লগ রোটেশন নেই, আমি আপনার সিস্টেমে একটি তৈরি করার পরামর্শ দিচ্ছি:

# /etc/logrotate.d/userlogs

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

নীচে আমার পূর্ববর্তী / var / রান / ব্যবহারকারীর / 1000 / লগ পোস্ট, আমি আপনাকে সুপারিশ করতে পারি না যদি না আপনি সত্যিই জানেন যে আপনার কী করছে (এবং যদি আপনি করেন তবে কীভাবে আমাকে বলুন!)

সম্ভবত নিম্নলিখিত হিসাবে, কিন্তু আমি এটি তৈরি করেছি কারণ এটি আমার কাছে বোধগম্য।

/var/run/user/1000/log/<app>.log
/var/run/user/1000/log/<app>/<context>.log

/ Var / লগ / ব্যবহারকারী / 1000 এর সাথে একীভূত করুন:

# Integrate with above /var/run/user, probably a bad idea:
# ln -s /var/log/user/1000/ /var/run/user/1000/log

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