একটি এনএফএসে ফাইল লক?


18

আমার সার্ভারটি এনএফএস (নেটওয়ার্ক ফাইল সিস্টেম) ব্যবহার করে এবং আমি পিএইচপি-র ফ্লক ()-ফাংশন ব্যবহার করতে অক্ষম। এনএফএসে ফাইলগুলি লক করার কোনও উপায় আছে বা এটি করার দরকার আছে কি?

উত্তর:


11

ম্যানুয়াল পৃষ্ঠাটি flock(2)দীর্ঘ সময়ের জন্য অতিক্রান্ত ছিল, তবে এর পরে (জোর দেওয়া খনি) বলতে আপডেট করা হয়েছে:

লিনাক্স ২.6.১২ থেকে এনএফএস ক্লায়েন্টরা পুরো ফাইলে বাইট-রেঞ্জের লক হিসাবে অনুকরণ করে প্লে () লক সমর্থন করে। এর অর্থ হ'ল fcntl (2) এবং ফ্লক () লকগুলি এনএফএসের মাধ্যমে একে অপরের সাথে যোগাযোগ করে। লিনাক্স ২.6.৩7 যেহেতু, কার্নেল একটি সামঞ্জস্যতা মোড সমর্থন করে যা ফ্লক () লকগুলি (এবং এফসিএনটিএল (২) বাইট অঞ্চল লক) স্থানীয় হিসাবে গণ্য করতে দেয়; এনএফএস (5) এ লোকাল_লক বিকল্পের আলোচনা দেখুন।

এটি অফিসিয়াল ম্যান-পৃষ্ঠাগুলির ওয়েবসাইট, http://man7.org/linux/man-pages/man2/flock.2.html যা ম্যান-পৃষ্ঠা ৪.০০ থেকে নতুন সংস্করণ দেখায়

লিনাক্স 2.6.12 2005 সালে প্রকাশিত হয়েছিল।

এটি মূলত জান্নবের উত্তরের মন্তব্য হিসাবে বোঝানো হয়েছিল, কিন্তু আমার সুনাম ছিল না সেই সময়ে। ডক আপডেটটি 2014 সালে ঘটেছিল: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236


11

আমি জানি না কীভাবে পিএইচপি flock()ফাংশন বাস্তবায়িত হয়, তবে ধরে নেওয়া এটি flock()সিস্কেলের একটি ইন্টারফেস , তবে এটি এনএফএসে পুরোপুরি কার্যকর হয় না। flock()ম্যানপেজ থেকে :

ফ্লক (2) এনএফএসের মাধ্যমে ফাইলগুলি লক করে না। পরিবর্তে fcntl (2) ব্যবহার করুন: এটি লিনাক্স সমর্থন করে এমন একটি লিনাক্সের যথেষ্ট পরিমাণে সংস্করণ এবং সার্ভারের সাহায্যে এনএফএসে কাজ করে।

এবং, অবশ্যই, একটি ম্যান পেজ যা বলে, তার সবকিছুই চূড়ান্ত সত্য।


+1, কটাক্ষ! এনএফএস এফএকিউ-র আইটেম ডি 10 বিস্তৃত।
থিমল

8

flock()পিএইচপি সহ লিনাক্স এনএফএসে ঠিক কাজ করে। আমরা এটি ব্যাপকভাবে ব্যবহার করি এবং এটি পছন্দসই হিসাবে কাজ করছে তা যাচাই করার জন্য এটির পুরোপুরি পরীক্ষা করেছি। আপনি ক্লায়েন্ট এবং সার্ভার উভয়ই প্রয়োজনীয় পরিষেবাগুলি চালাচ্ছেন কিনা তা পরীক্ষা করে দেখুন। "পোর্টম্যাপার" এবং "rpc.statd" সন্ধান করুন। যদি তারা চলমান না থাকে তবে আপনার ডিস্ট্রোতে কোন সূচনা স্ক্রিপ্টগুলি এগুলি শুরু করে তা আপনাকে খুঁজে বের করতে হবে। ডেবিয়ান-ভিত্তিক ডিস্ট্রোজে এটি " /etc/init.d/portmap" এবং " /etc/init.d/nfs-common" রয়েছে।

ক্লায়েন্টের কাছ থেকে, " rpcinfo -u $NFSSERVER status" চালনা করুন এবং আপনি কোনও প্রতিক্রিয়া পেয়েছেন কিনা তা দেখুন। আমার সেটআপে, আমি ফলাফল হিসাবে "প্রোগ্রাম 100024 সংস্করণ 1 প্রস্তুত এবং অপেক্ষায়" পাই।

ওহ, এও মনে রাখবেন যে ক্লায়েন্ট এবং সার্ভার উভয়েরই একে অপরের জন্য নির্ভরযোগ্য হোস্টনাম এন্ট্রি না থাকলে কিছু পরিস্থিতিতে এনএফএস এবং স্ট্যাটড বিচলিত হতে পারে। /etc/hostsদুটি মেশিনে ডাবল চেক করুন।


1
আমি প্রকৃতপক্ষে সার্ভারের সুনির্দিষ্ট বিশদ পরিবর্তন করার মতো অবস্থানে নেই। ফ্লপ () -ফান্চান এমনকি php.ini থেকে অক্ষম করা হয়েছে, কারণ এটি কাজ করবে না, কমপক্ষে যা আমাকে বলা হয়েছিল।
ফ্যাক্টর

3

শুধু নিজের উত্তর দিতে চেয়েছি। সমাধানটি এখানে পাওয়া যাবে: http://us3.php.net/manual/en/function.flock.php#82521


3
তালিকাভুক্ত দ্বিতীয় বিকল্পটি হ'ল আমি যা বর্ণনা করছি তা হল: লিনাক্স এনএফএসে অন্তর্নির্মিত লক সার্ভারটি ব্যবহার করে। সমস্যা সমাধানের পদক্ষেপগুলি এটি নির্ধারণ করার জন্য ডিজাইন করা হয়েছিল যে এটি (দৃশ্যত) কাজ করছে না ...
ইনসেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.