শেল স্ক্রিপ্ট স্তরে ফাইলের আকার (স্টডআউট) সীমাবদ্ধ করার সহজ উপায়?


10

ঠিক আছে, এটি আমার দৃষ্টিকোণ থেকে খুব ব্যবহারিক ব্যবহারের কেস।

ধরা যাক আমার কাছে একটি সাধারণ শেল অনেলাইনার রয়েছে যা আউটপুটটিকে কোনও ফাইলে লগ করে। এটি কেবল কিছু হতে পারে, উদাহরণস্বরূপ tcpdump ump আউটপুট ফাইল প্রদত্ত আকারের বেশি হবে না তা নিশ্চিত করার জন্য কি কোনও জেনেরিক এবং তুচ্ছ উপায় আছে?

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

এখন, আমি কয়েকটি সরঞ্জামগুলিতে অপশন তৈরির বিষয়ে অবগত (যেমনটি tcpdump--W / -C এর সংমিশ্রণ)। আমার যা দরকার তা হ'ল একটি সাধারণ জালিয়াতি।

দীর্ঘ গল্প সংক্ষিপ্ত - আমি যখন স্ক্রিপ্টটি চালিত করি:

% this -is --my=very|awsome|script >> /var/tmp/output.log

কীভাবে নিশ্চিত করা যায় যে আউটপুট.লগ কখনই 1 জিবি-র চেয়ে বড় হবে না।

স্ক্রিপ্ট ক্র্যাশ হতে পারে, মেরে ফেলা বা যা কিছু হোক।

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

উত্তর:


16

আপনি এটির headজন্য ব্যবহার করতে পারেন :

command | head -c 1G > /var/tmp/output.log

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


মাথা আবার দেয়াল এটি আরও সহজ হতে পারে না। ধন্যবাদ!
এমড্রোজডিজিল

2
এটি tail -c 1Gকোনও কাজের লেজের দিকে নজর দেওয়াও কার্যকর বলে মনে হয় । কমান্ড শেষ হওয়ার পরে বোঝা যায় এটি প্রবাহিত হয়।
ছদ্মবেশী

প্রত্যয়গুলির জন্য ইউনিট ম্যাক ওএসে কাজ করে না।
anumi

0

কোনও ব্যবহারকারীর জন্য সর্বাধিক ফাইলের আকার সেট করুন যা কেবলমাত্র এই স্ক্রিপ্টগুলি চালাতে ব্যবহৃত হবে।

/etc/security/limitsনির্দিষ্ট ব্যবহারকারীর জন্য সুস্পষ্ট মান না থাকলে ফাইলটি "ডিফল্ট" এর মানগুলির সাথে ব্যবহারকারীকে সীমাবদ্ধ করে। এই ব্যবহারকারী নির্দিষ্ট মানগুলি ডিফল্ট মানগুলিকে ওভাররাইট করবে। আপনার ওএসের উপর নির্ভর করে ফাইলটির কিছুটা আলাদা নাম থাকতে পারে।

যদি আপনার লগ ব্যবহারকারীর নাম লগ_মেকার করা হয় তবে ফাইলটিতে এই লাইনটি যুক্ত করুন:

log_maker hard fsize 1000000

Fsize এর পরে সংখ্যাটি কেবি-র সর্বোচ্চ ফাইল আকার size


0

কার্টেল একটি প্রোগ্রামের আউটপুটটির আকারকে সীমাবদ্ধ করে এবং নিম্নলিখিত কমান্ডের সাহায্যে আউটপুটের শেষ এক্স কেবি সংরক্ষণ করে:

রান_প্রগ্রাম | কার্টেল-এস 1 জি মাইপ্রোগ্রাম.লগ

https://github.com/Comcast/Infinite-File-Curtailer

দ্রষ্টব্য: আমি উপরের রেপোর রক্ষণাবেক্ষণকারী। সমাধানটি ভাগ করে নিচ্ছি ...


0

আপনি যে কোনও ফাইল সীমাবদ্ধ করতে পারেন

tail -c 1G myLog.log > myLog.tmp
mv myLog.tmp > myLog.log

সরাসরি একই ফাইলে লেজ লিখে খালি ফাইল তৈরি করে। সুতরাং আপনার একটি অস্থায়ী ফাইল ব্যবহার করা দরকার।


লেজ -c 1G myLog.log> myLog.tmp mv myLog.tmp> myLog.log এই লগটি মেরে ফেলবে, আমি মনে করি আপনি <> এর পরিবর্তে> ব্যবহার করতে চেয়েছিলেন বা আপনাকে ড্যান্ট করবেন না?
ডিজেডমি

এই কমান্ডের উদ্দেশ্যটি হ'ল কেবল সর্বশেষ 1 জি দিয়ে লগটি পুনরায় লেখা। >> পূর্ববর্তী কমান্ডের জন্য হওয়া উচিত: doSomething >> myLog.log; লেজ -c 1G myLog.log> myLog.tmp; এমভি myLog.tmp> myLog.log;
সেভেরিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.