জাতীয় নেটওয়ার্ক সার্ফিং আমি একটি জুড়ে এসেছি আকর্ষণীয় নিবন্ধ (যা আমি এখানে টেক্সটালি এনেছি কারণ এটি দক্ষতার সাথে ব্যাখ্যা করা হয়েছে) যেখানে এর লেখক আমাদের দেখায় কীভাবে আমাদের বাশ স্ক্রিপ্টগুলি আরও শক্তিশালী করা যায় যাত্রীর সঙ্গের নিজলটবহর.
ফাঁদে ফাঁকে আপনার ব্যাশ স্ক্রিপ্টগুলি আরও শক্তিশালী করুন
কল্পনা করুন যে আপনার কাছে বাশ স্ক্রিপ্ট রয়েছে যা প্রতি ছয় ঘন্টা অন্তর চলমান এবং কোনও এক সময় এটি ব্যর্থ হয় বা একই স্ক্রিপ্ট একই সাথে দু'বার চলে। এই দুটি পরিস্থিতি বেশ অস্বস্তিকর কারণ এগুলি সংশোধন করার জন্য মানুষের হস্তক্ষেপের প্রয়োজন হয় বা নির্দিষ্ট সময়ে তাদের মোকাবেলা করা যায় না, সিস্টেমটিকে একটি বেমানান অবস্থায় ফেলে। অন্যদের মধ্যে এটির সমাধান হ'ল ফাঁদ ব্যবহার করা।
ট্র্যাশ বাশ স্ক্রিপ্টগুলির আউটপুট নিয়ন্ত্রণের একটি সহজ এবং কার্যকর উপায়। একই প্রাথমিক পরিস্থিতিতে ফিরে যাওয়া যাক, যদি স্ক্রিপ্টটি ম্যানুয়ালি বন্ধ করা হয়, উদাহরণস্বরূপ ctrl-c এর সাহায্যে আউটপুট সিগন্যাল ফেরত বাধা দেওয়া হয়
INT
এবং যদি এটি দিয়ে শেষ হয়
kill
তাহলে আউটপুট হবে
TERM
.
সমস্ত সম্ভাব্য প্রস্থান কোডগুলির সাথে দেখা যায়
kill -l
তবে সর্বাধিক ব্যবহৃত হয় নিখুঁতভাবে
আইএনটি, শর্ত, প্রস্থান
যদি স্ক্রিপ্টটিতে ফাইল সিংক্রোনাইজেশন থাকে, উদাহরণস্বরূপ
rsync
সর্বাধিক বুদ্ধিমান জিনিস হ'ল লক ফাইলের উপর নির্ভর করা যা স্ক্রিপ্টটি একই সাথে চলতে দেয় না:
LOCK = "/ var / run / rsync.lock" যদি [! -e $ লক]; তারপরে স্পর্শ করুন $ লক আরএসসিএনএভিজে-ফু ফু বার আরএম OC লক অন্য কোনও প্রতিধ্বনি "আরএসইএনসি ইতিমধ্যে চলছে" ফাই
সাধারণ স্প্যানিশ ভাষায়, উপরের স্ক্রিপ্টটি পরীক্ষা করে যে লক ফাইলটি বিদ্যমান রয়েছে এবং যদি এটি বিদ্যমান না থাকে, এটি এটি তৈরি করে এবং পরে সম্পর্কিত কমান্ডটি কার্যকর করে, শেষ পর্যন্ত লক ফাইলটি মুছে ফেলে। যদি ফাইলটি বিদ্যমান থাকে তবে স্ক্রিপ্টটি ব্যবহারকারীকে একটি বার্তা প্রেরণ করে যা নির্দেশ করে যে কমান্ডটি ইতিমধ্যে চলছে।
তবে যখন সমস্যাযুক্ত পরিস্থিতি দেখা দেয় তখন এটি হতে পারে যে লক ফাইলটি অপসারণ করা হয় না, অযাচিত প্রভাবগুলি ধ্বংস করে দেয়। সমাধানটি খুব সহজ:
LOCK = "/ var / run / rsync.lock" যদি [! -e $ লক]; তারপরে "rm -f $ LOCK; প্রস্থান করুন" INT TERM প্রস্থান করুন স্পর্শ করুন rs লক আরএসসিএনএভিজেজিফু বার আরএম $ লক ফাঁদ - INT TERM Exit অন্য প্রতিধ্বনি "rsync ইতিমধ্যে চলছে" ফাই
এই সমাধানটির বৈশিষ্ট্য হ'ল কমান্ডটি একটি ফাঁদে আবদ্ধ থাকে, যাতে কোনও সংকেত প্রাপ্ত হয়
আইএনটি, শর্ত, প্রস্থান
স্ক্রিপ্টটি বন্ধ হয়ে যায় এবং লক ফাইলটি সাফ করে।
এটি বলার অপেক্ষা রাখে না যে লক ফাইলটি যাচাই করা এবং এটি তৈরির সময়টির মধ্যে উপরের স্ক্রিপ্টে প্রতিযোগিতার পরিস্থিতি থাকতে পারে। একটি সম্ভাব্য সমাধান হ'ল পুনর্নির্দেশ এবং ব্যাশের নোক্লোবার মোড ব্যবহার করা যা কোনও বিদ্যমান ফাইলে পুনর্নির্দেশ না করে:
LOCK = "/ var / run / rsync.lock" যদি (সেট-ওোকলবার; প্রতিধ্বনি $$> "$ লক") 2> / দেব / নাল; তারপরে 'rm -f "OC লক" ফাঁদে ফেলুন; প্রস্থান $? ' INT TERM Exit rsync -avz foo bar rm -f OC LOCK trap - INT TERM Exit অন্য ইকো "আরএসইএনসি ইতিমধ্যে চলছে: $ (বিড়াল $ LCK)" ফাই
আধুনিকতার অদ্ভুততা হ'ল এটি ইতিমধ্যে আমি আগেই বলেছি হিসাবে ব্যবহৃত হয়েছে, নোক্লোবার মোড এবং লক ফাইলটিতে যে প্রক্রিয়াটি কার্যকর করা হচ্ছে তার পিআইডি রয়েছে।
এটা উল্লেখযোগ্য যে অন্যান্য সমাধান যেমন আছে
flock
o
solo
তবে এই পোস্টে আমি ব্যাশের নিজস্ব সংস্থানগুলির সাথে সমাধানগুলি ভাগ করতে চেয়েছিলাম। এটির সাহায্যে ট্র্যাপ সম্পর্কে আপনি আরও কিছু শিখতে পারেন চমৎকার গাইড.
দুর্দান্ত! ভাগ করে নেওয়ার জন্য ধন্যবাদ.
সুন্দর নিবন্ধ, কেবল পরিবর্তন 'ইকো' আরএসসিএন ইতিমধ্যে চলছে: $ (বিড়াল $ এলসিকে) "" থেকে 'ইকো "আরএসসিএনসি ইতিমধ্যে চলছে: $ (বিড়াল $ লক)"'
শুভেচ্ছা
একটি খুব আকর্ষণীয় নিবন্ধ, হ্যাঁ স্যার! এই আমি রাখি।
এটি মাথায় রাখা খুব দরকারী আদেশ command আমি কোনও পোস্টে প্রকাশিত স্ক্রিপ্টে এটি ব্যবহার করেছি, যখন স্ক্রিপ্টটি থামানো হয়েছিল তখন তৈরি হওয়া কিছু ফাইল মুছতে।
খুব মজার, হ্যাঁ স্যার।