एक NFS पर फ़ाइल लॉक?


18

मेरा सर्वर NFS (नेटवर्क फाइल सिस्टम) का उपयोग करता है, और मैं PHP के झुंड () -function का उपयोग करने में असमर्थ हूं। क्या एनएफएस पर फ़ाइलों को लॉक करने का एक तरीका है या ऐसा करने की आवश्यकता है?

जवाबों:


11

मैनुअल पेज flock(2)लंबे समय से पुराना था, लेकिन तब से यह कहने के लिए अद्यतन किया गया है (मेरा):

लिनक्स 2.6.12 के बाद से, एनएफएस क्लाइंट पूरे फाइल पर बाइट-रेंज ताले के रूप में अनुकरण करके झुंड () लॉक का समर्थन करते हैं। इसका मतलब यह है कि fcntl (2) और झुंड () ताले एनएफएस पर एक दूसरे के साथ बातचीत करते हैं। लिनक्स 2.6.37 के बाद से, कर्नेल एक संगतता मोड का समर्थन करता है जो झुंड () ताले (और भी fcntl (2) बाइट क्षेत्र ताले) को स्थानीय के रूप में माना जाता है; nfs (5) में local_lock विकल्प की चर्चा देखें।

यह आधिकारिक मैन-पेज वेब साइट से है, http://man7.org/linux/man-pages/man2/flock.2.html , जो मैन-पेज से नया संस्करण दिखाता है 4.00

2005 में लिनक्स 2.6.12 जारी किया गया था।

यह मूल रूप से जनेब के जवाब पर टिप्पणी करने के लिए था, लेकिन उस समय मेरी प्रतिष्ठा नहीं थी। डॉक्टर अपडेट 2014 में हुआ: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19bafc569df47d12bffdf6276236236


11

मुझे नहीं पता कि PHP flock()फ़ंक्शन कैसे लागू किया जाता है, लेकिन यह flock()सिसकॉल के लिए एक इंटरफ़ेस है , तो यह एनएफएस पर बिल्कुल भी काम नहीं करता है। से flock()मैनपेज:

झुंड (2) एनएफएस पर फ़ाइलों को लॉक नहीं करता है। इसके बजाय fcntl (2) का उपयोग करें: जो एनएफएस पर काम करता है, लिनक्स के एक हालिया संस्करण और एक सर्वर को दिया जाता है जो लॉकिंग का समर्थन करता है।

और, ज़ाहिर है, सब कुछ जो एक आदमी पृष्ठ कहता है, चाहे कितना पुराना हो, अंतिम सत्य है।


+1, कटाक्ष! NFS FAQ में आइटम D10 विस्तृत है।
थीमेल

8

flock()पीएचपी सहित लिनक्स एनएफएस पर ठीक काम करता है। हम इसे बड़े पैमाने पर उपयोग करते हैं और इसे सत्यापित करने के लिए अच्छी तरह से परीक्षण कर चुके हैं कि यह वांछित है। यह देखने के लिए जांचें कि क्या आप क्लाइंट और सर्वर दोनों पर सभी आवश्यक सेवाएं चला रहे हैं। "Portmapper" और "rpc.statd" के लिए देखें। यदि वे नहीं चल रहे हैं, तो आपको यह पता लगाने की आवश्यकता है कि कौन सी इनिट स्क्रिप्ट आपके डिस्ट्रो पर शुरू होती है। डेबियन-आधारित डिस्ट्रोस पर यह " /etc/init.d/portmap" और " /etc/init.d/nfs-common" है।

क्लाइंट से, " rpcinfo -u $NFSSERVER status" चलाएं और देखें कि क्या आपको प्रतिक्रिया मिलती है। मेरे सेटअप पर, मुझे "प्रोग्राम 100024 संस्करण 1 तैयार और प्रतीक्षा" परिणाम के रूप में मिलता है।

ओह, यह भी ध्यान रखें कि कुछ परिस्थितियों में एनएफएस और स्टेटड परेशान हो सकते हैं यदि क्लाइंट और सर्वर दोनों के पास एक दूसरे के लिए विश्वसनीय होस्टनाम प्रविष्टियां नहीं हैं। दोहरी जाँच/etc/hostsदोनों मशीनों पर ।


1
मैं वास्तव में सर्वर विशिष्ट विवरण को बदलने की स्थिति में नहीं हूं। झुंड () -function भी php.ini से अक्षम है, क्योंकि यह काम नहीं करेगा, कम से कम यही मुझे बताया गया है।
rFactor

3

बस खुद को जवाब देना चाहता था। समाधान यहां पाया जा सकता है: http://us3.php.net/manual/en/function.flock.php#82521


3
सूचीबद्ध दूसरा विकल्प वही है जो मैं वर्णन करता हूं: लिनक्स एनएफएस में अंतर्निहित लॉक सर्वर का उपयोग करना। समस्या निवारण के चरणों को यह निर्धारित करने के लिए डिज़ाइन किया गया था कि यह (जाहिरा तौर पर) काम क्यों नहीं कर रहा था ...
इंस्पेक्टर 20'09
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.