কেউ কীভাবে কোনও ফাইল লক করতে এবং লক করা ফাইলটিতে লেখার জন্য ঝাঁক এবং ফাইল বর্ণনাকারী ব্যবহার করবেন তা ব্যাখ্যা করতে পারেন?


14

আমি flockসরঞ্জামটিতে নতুন হিসাবে আমার সাথে বেয়ার এবং আমি যতদূর জানি ফাইল বর্ণনাকারী ব্যবহার করিনি।

আমি একটি ব্যাশ স্ক্রিপ্ট করে একটি কার্ল অনুরোধ করে তোলে এবং নামক একটি ফাইল আউটপুট লিখেছেন আছে resp.txt। আমাকে একটি এক্সক্লুসিভ লক তৈরি করতে হবে যাতে আমি সেই ফাইলটিতে লিখতে পারি এবং একই সাথে একাধিক ব্যবহারকারী স্ক্রিপ্টটি চালাচ্ছে এবং একই সময়ে পাঠ্য ফাইলটি সম্পাদনা করতে পারে না not

এই কোডটি আমি ফাইলটি লক করতে, অনুরোধটি সম্পাদন করতে এবং পাঠ্য ফাইলে লেখার প্রত্যাশা করছি:

(
flock -e 200
curl 'someurl' -H 'someHeader' > resp.txt
) 200>/home/user/ITS/resp.txt

এটি কি এটি সম্পর্কে সঠিক উপায়? আমার আসল স্ক্রিপ্টটি এর চেয়ে কিছুটা দীর্ঘ, তবে আমি যখন flockব্যাশ স্ক্রিপ্টটিতে সিনট্যাক্স যুক্ত করব তখন এটি ভেঙে যাবে বলে মনে হচ্ছে ।

যদি কেউ এই ফাইল বর্ণনাকারী কীভাবে কাজ করে তা ব্যাখ্যা করতে পারে এবং যদি আমি ফাইলটি সঠিকভাবে লক করছি তবে তা দুর্দান্ত হবে!

উত্তর:


8

এটি সঠিক নয় কারণ আপনি যখন করেন ( flock -e 200; ... ) 200> file, আপনি এক্সক্লুসিভ লক পাওয়ার file আগে ফাইলটি কেটে ফেলা হয় । আমি মনে করি আপনার করা উচিত:

touch resp.txt
(
  flock -e 200
  curl 'someurl' -H 'someHeader' > resp.txt
) 200< resp.txt

কেবলমাত্র পঠন হিসাবে খোলা ফাইলটিতে লক স্থাপন করতে।

বিঃদ্রঃ. কিছু শেল 9 এর চেয়ে বড় ফাইল বর্ণনাকারীদের সমর্থন করে না Moreover তাছাড়া হার্ডকোডযুক্ত ফাইল বর্ণনাকারী ইতিমধ্যে ব্যবহার করা যেতে পারে। উন্নত শেল (ব্যাশ, ksh93, zsh) দিয়ে নিম্নলিখিতগুলি করা যেতে পারে:

touch resp.txt
(
  unset foo
  exec {foo}< resp.txt
  flock -e $foo
  curl 'someurl' -H 'someHeader' > resp.txt
)

আমার দরকার নেই কার্ল কমান্ডটি ফাইলটিতে লিখতে হবে। আমি কীভাবে ভুল বোঝাবুঝি flock? আমি ফাইল বর্ণনাকারীতে নতুন: /
ডাকপঞ্চে cher

1
@ ডাকপুঞ্চার লক পদ্ধতিটি আপনি ফাইলটিতে করতে পারেন এমন / পড়ার কাজগুলি থেকে পৃথক। সুতরাং, curlএখনও ফাইল লিখতে পারেন। নোট করুন যে এটি এনএফএসের সাথে অনিরাপদ (বা এমনকি কাজ নাও করতে পারে) হতে পারে তবে এনএফএসের উপর ফাইল লক করার জন্য শেল স্ক্রিপ্ট ব্যবহার করবেন না। এর সাহায্যে bashআপনি ফাইল পড়া এবং লেখার জন্য উভয়ই খুলতে পারেন: 200<> resp.txtতবে এটি কোনও পরিবর্তন করা উচিত নয়।
ভিঙ্ক 17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.