উদাহরণ: ফাইল লক সহ সিরিয়ালি চালাতে স্ক্রিপ্টগুলিকে জোর করতে ঝাঁক ব্যবহার করা
একটি উদাহরণ হ'ল সিরিয়াল ব্যাপী সিস্টেমকে প্রশস্ত করতে স্ক্রিপ্টগুলিকে বাধ্য করার জন্য ফাইল লকিংয়ের ব্যবহার করা। আপনি যদি একই ধরণের দুটি স্ক্রিপ্ট একই ফাইলগুলিতে পরিচালনা করতে না চান তবে এটি কার্যকর। অন্যথায়, দুটি স্ক্রিপ্টগুলি একে অপরের সাথে হস্তক্ষেপ করবে এবং সম্ভবত ডেটা দূষিত হবে।
#exit if any command returns a non-zero exit code (like flock when it fails to lock)
set -e
#open file descriptor 3 for writing
exec 3> /tmp/file.lock
#create an exclusive lock on the file using file descriptor 3
#exit if lock could not be obtained
flock -n 3
#execute serial code
#remove the file while the lock is still obtained
rm -f /tmp/file.lock
#close the open file handle which releases the file lock and disk space
exec 3>&-
লক এবং আনলক সংজ্ঞায়িত করে কার্যত পর্বত ব্যবহার করুন
আপনি এই লকিং / আনলকিং লজিকটিকে পুনরায় ব্যবহারযোগ্য ফাংশনে আবদ্ধ করতে পারেন। নিম্নলিখিত trap
শেলটি অন্তর্নির্মিত স্ক্রিপ্টটি বের হয়ে গেলে স্বয়ংক্রিয়ভাবে ফাইল লক প্রকাশ করবে (ত্রুটি বা সাফল্য)। trap
আপনার ফাইল লকগুলি পরিষ্কার করতে সহায়তা করে। পাথটি /tmp/file.lock
একটি শক্ত কোডড পথ হওয়া উচিত যাতে একাধিক স্ক্রিপ্ট এতে লক করার চেষ্টা করতে পারে।
# obtain a file lock and automatically unlock it when the script exits
function lock() {
exec 3> /tmp/file.lock
flock -n 3 && trap unlock EXIT
}
# release the file lock so another program can obtain the lock
function unlock() {
# only delete if the file descriptor 3 is open
if { >&3 ; } &> /dev/null; then
rm -f /tmp/file.lock
fi
#close the file handle which releases the file lock
exec 3>&-
}
unlock
যুক্তিবিজ্ঞান উপরে সামনে লক মুক্তি হয় ফাইল মুছে ফেলতে হয়। এইভাবে এটি লক ফাইলটি পরিষ্কার করে। ফাইলটি মোছা হওয়ায় এই প্রোগ্রামের অন্য একটি উদাহরণ ফাইল লকটি অর্জন করতে সক্ষম।
স্ক্রিপ্টগুলিতে লক এবং আনলক ফাংশনগুলির ব্যবহার
আপনি নিম্নলিখিত স্ক্রিপ্টগুলিতে এটি ব্যবহার করতে পারেন।
#exit if any command returns a non-zero exit code (like flock when it fails to lock)
set -e
#try to lock (else exit because of non-zero exit code)
lock
#system-wide serial locked code
unlock
#non-serial code
আপনি যদি চান আপনার কোডটি এটি লক করতে সক্ষম না হওয়া পর্যন্ত অপেক্ষা করতে পারে তবে আপনি স্ক্রিপ্টটি এডজাস্ট করতে পারেন:
set -e
#wait for lock to be successfully obtained
while ! lock 2> /dev/null; do
sleep .1
done
#system-wide serial locked code
unlock
#non-serial code