IIS7 को लॉक की गई फ़ाइल को रिलीज़ करने के लिए कैसे प्राप्त करें?


25

हमारे उत्पादन के दौरान, रूट निर्देशिका में एक बहुत बड़ी (10 मेगाबाइट) स्थैतिक सामग्री फ़ाइल को कभी-कभी IIS द्वारा लॉक किया जाएगा और इसे स्वच्छ कार्य द्वारा हटाया नहीं जा सकता। यह संभवतः इसलिए है क्योंकि यह उस समय सक्रिय रूप से एक या एक से अधिक ग्राहकों को परोसा जा रहा है।

निर्माण प्रक्रिया वेबसाइट को सफाई से पहले रोक देती है

c:\Windows\System32\inetsrv\appcmd.exe stop site http://oursite.com

हालाँकि, यह फ़ाइल को रिलीज़ नहीं करता है - हमें इसके लॉक को त्यागने की प्रक्रिया प्राप्त करने के लिए IIS को पुनरारंभ करना होगा।

appcmd.exeआपको IIS को पूरी तरह से नीचे ले जाने की अनुमति देता है; हम ऐसा नहीं करना चाहते हैं!

क्या आईआईएस को फिर से शुरू किए बिना, आईआईएस को एक बंद फ़ाइल से जाने के लिए कोई अन्य तरीके हैं? बस व्यक्तिगत वेबसाइट को रोकना और शुरू करना निश्चित रूप से फ़ाइल लॉक को रिलीज़ करने के लिए काम नहीं कर रहा है।


1
गंभीर सवाल अब: क्या यह स्थिर फ़ाइल बिल्ड से बिल्ड में बदल जाती है या यह सिर्फ एक फाइल है जो कभी नहीं बदलेगी?
splattne

बस एक पागल विचार, लेकिन मुझे आश्चर्य है कि अगर आप इस फ़ोल्डर पर छाया प्रतियां सक्षम करते हैं तो क्या होगा?
रिचर्ड वेस्ट

यह आपका साइटमैप है। Xml सही है?
डेव चेनी

हाँ, यह हमारा साइटमैप था। एक्सएमएल, लेकिन अब हमारे पास इसके लिए एक एमवीसी मार्ग है और मेमोरी में चूसने वाले को कैश करना है। कोई और ताला नहीं!
जारोड डिक्सन

जवाबों:


12

ऐसे उपकरण हैं, जैसे कि Sysinternal's प्रोसेस एक्सप्लोरर, जो कि फाइल को जबरन और जबरन बंद कर सकता है, हालाँकि ऐसा करने के बाद एप्लिकेशन की स्थिति और व्यवहार (आपका और इस मामले में, IIS) दोनों ही अपरिभाषित है। कुछ परवाह नहीं करेंगे, कुछ त्रुटि करेंगे और अन्य कठिन दुर्घटना करेंगे।

सही समाधान आउटेज लेने के लिए है और आईआईएस को सर्वर की स्थिरता को संरक्षित करने के लिए स्वयं ताले को साफ करने और साफ करने की अनुमति देता है। यदि यह संभव नहीं है, तो आप एक ही बॉक्स पर दूसरी साइट बना सकते हैं, या नई सामग्री के साथ एक नया बॉक्स सेट कर सकते हैं, और उत्पादन के लिए नई सामग्री को "बढ़ावा" देने के लिए डोमेन नाम / आईपी को स्थानांतरित कर सकते हैं।


2
+1 प्रक्रिया अन्वेषक के लिए, यह आपको समस्या को हल करने में सक्षम होने में कुछ अंतर्दृष्टि दे सकता है यदि आप देख सकते हैं कि थ्रेड फ़ाइल हैंडल को क्या पकड़ रहा है
निक कवाडिया

शायद Powershell , C # या स्क्रिप्ट
बैट-

मुझे IIS को केवल उस IIS नियंत्रित फ़ोल्डर में फ़ाइलों को कॉपी करने और फिर एक ब्राउज़र में वेब ऐप को देखने की कोशिश करके फ़ाइल या निर्देशिका को अनलॉक करने के लिए IIS मिला है। कभी-कभी यह प्रक्रिया उन हैंडल को अनलॉक करती है।
मार्क नून

13

मैं ऐसा करने के लिए "हैंडल" नामक एक छोटे उपकरण का उपयोग करता हूं ।

आप मूल रूप से इसे उस फ़ाइल का नाम देते हैं जो लॉक है और यह आपको बताती है कि कौन सी प्रक्रिया इसका उपयोग कर रही है:

handle c:\weird.file
Something.exe pid: 1000 100: C:\weird.file
Something.exe pid: 1000 101: C:\weird.file

फिर आप इसे संभाल बंद करने के लिए इसे -c स्विच पास करते हैं:

handle.exe -c 101 -p 1000 -y
handle.exe -c 100 -p 1000 -y

आप काम कर सकते हैं कि आउटपुट को पार्स करने के लिए एक रैपर प्रोग्राम के बिना एक स्क्रिप्ट का निर्माण करें लेकिन उम्मीद है कि इससे मदद मिलेगी।


बचाव के लिए शक्तिशाली मार्क रोसिनोविच - मैं इसकी जांच करूंगा, लेकिन जब एक हैंडल को जबरन बंद करना मुझे परेशान करता है तो हैंडल की कार्यक्रम अस्थिरता की सख्त चेतावनी।
जारोड डिक्सन

उम्मीद है कि कोई भी अस्थिरता प्रश्न में AppPool तक सीमित होगी। यदि ऐसा है, तो लॉक जारी करने के बाद आप बस AppPool को पुनः आरंभ कर सकते हैं।
साइमन जॉनसन

@ जारोद: कोई भाग्य? क्या आप अपने मूल पोस्ट में कोई परिणाम पोस्ट कर सकते हैं, कृपया? मुझे यह देखने में अच्छा लगेगा कि यहाँ क्या हो रहा है, पर्दे के पीछे।
शुद्ध। क्रोम

शायद Powershell , C # या स्क्रिप्ट
बैट-

5

यदि आप अस्थायी असेंबलियों में aspx फ़ाइलों के संकलन का मतलब है, तो मुझे यकीन नहीं है। हम ASP.NET परिनियोजन प्रोजेक्ट्स का उपयोग कर रहे हैं , जो पहले से सभी aspx / ascx फ़ाइलों को precompile करता है।

"प्रकाशित" से "बिन" फ़ोल्डर में बाइनरी फ़ाइलों की प्रतिलिपि बनाते समय, हम अस्थायी रूप से एक app_offline.htm फ़ाइल को सक्षम करते हैं जो सभी असेंबली की प्रतिलिपि बनाने के बाद हटा दी जाती है (बस कुछ सेकंड)। इस तरह मैंने कभी भी फ़ाइल के ताले का अनुभव नहीं किया।

संपादित करें:

आप वेब साइट को रोकने के बजाय, appcmd.exe का उपयोग करके ऐप पूल को रीसायकल करने का प्रयास कर सकते हैं:

C:\Windows\System32\inetsrv\appcmd.exe recycle apppool "My App Pool Name"

1
नहीं, यह रूट डायरेक्टरी में सिर्फ एक स्टेटिक कंटेंट फाइल है - उस जानकारी के साथ सवाल को अपडेट करना!
जारोड डिक्सन

1
मुझे लगता है कि आप अपने निर्माण कार्य के समय के दौरान app_offline.htm का उपयोग कर रहे हैं?
शाम

मुझे लगता है कि हमने बिना किसी लाभ के मैन्युअल रूप से पुनर्चक्रण करने की कोशिश की है, लेकिन हम अगली बार फिर से कोशिश करेंगे कि कोई लॉक हो (ऐप पूल .NET के लिए हैं, ठीक है; शायद यहाँ मदद नहीं करेगा)। और हमारे पास app_offline.htm फ़ाइल बनाई जाती थी, लेकिन यह लॉकिंग के साथ मदद नहीं करती थी - यही कारण है कि हम व्यक्तिगत साइट को नीचे ले जाने के लिए चले गए।
जारोड डिक्सन

मुझे डर है कि तुम सही हो। मैं इसका हमारे एक सर्वर पर परीक्षण करूंगा और आपके पास वापस आऊंगा।
प्रातः

1
@splattne: एप्लिकेशन पूल को रीसायकल करना चाहिए क्योंकि वेबसाइट द्वारा फाइल खोली गई थी। यदि पूल को पुनर्चक्रित करने में मदद नहीं मिलती है, तो मेरा अनुमान है कि कुछ और फ़ाइल को लॉक करता है।
pbz

2

मैं अब यह कोशिश कर रहा हूँ: यदि आप निर्देशिका पर सक्रिय अनुक्रमण करते हैं तो स्पष्ट रूप से फ़ाइल लॉकिंग के साथ समस्याएँ हो सकती हैं। http://www.richard-banks.org/2008/04/how-to-fix-problems-with-locked-files.html

यह IIS 6.0 है, लेकिन चूंकि यह OS से संबंधित है और IIS नहीं इसका मूल कारण हो सकता है।


1

प्रक्रिया मॉनिटर को आपकी जांच में मदद करनी चाहिए, यहां मार्क के ब्लॉग ( उस आदमी ने जो उपकरण लिखा था) से एक उदाहरण है कि फ़ाइल को कैसे संभालना है।

आप फ़ाइल अनलॉक स्तर पर अपनी अनलॉकिंग को स्वचालित करने के लिए इस अनलॉकर टूल को आज़माना चाह सकते हैं ।


कूल, मैंने कभी प्रोसेस मॉनिटर का उपयोग नहीं किया है; लेकिन मेरे द्वारा उपयोग किए जाने वाले प्रत्येक वर्कस्टेशन को तुरंत प्रोसेस एक्सप्लोरर मिल जाता है! technet.microsoft.com/en-us/sysinternals/bb896653.aspx
जारोड डिक्सन

1

उत्तर नहीं है, लेकिन आईआईएस सर्वर को फिर से शुरू किए बिना उस फ़ाइल को "अनलॉक" करने का कोई तरीका नहीं है।

यदि आप एक नए खाली फ़ोल्डर का निर्माण / परिनियोजन करते हैं और वेबसाइट की होम डायरेक्टरी को उस फ़ोल्डर में बदलते हैं तो क्या होगा? आपको एक नया फ़ोल्डर नाम बनाना होगा या दो नामों के बीच स्विच करना होगा।

मुझे नहीं पता कि वह फ़ाइल किस फ़ोल्डर में है। यदि इसे रूट फ़ोल्डर में नहीं होना है, तो आप इसे एक नए बनाए गए फ़ोल्डर में रख सकते हैं और उस फ़ोल्डर की ओर इशारा करते हुए एक आभासी निर्देशिका बना सकते हैं। तो आप आवेदन के लिए अपने मानक घर निर्देशिका रख सकते हैं।


1

मुझे भी यही समस्या थी। अब मैंने MSDeploy (वेब ​​डिप्लॉय) पर स्विच किया , और अब मैं बिना किसी चीज को रोके वेब साइट को मज़बूती से अपडेट कर सकता हूं। वास्तव में यह कदम हमारे स्वचालित बिल्ड टूल में लिपिबद्ध है और यह बिना किसी समस्या के हर समय होता है। और यह तेज भी है।


0

सुनिश्चित करें, IIS सेवा बंद करें। शायद मुझे कुछ समझ नहीं आ रहा है, क्षमा करें।


2
यदि आप IIS सेवा को रोक रहे हैं, तो आप सभी वेब साइटों को नीचे ले जाएंगे ...
splattne

यह एक ऐसी चीज है जिससे हम वास्तव में बचना चाहते हैं, क्योंकि हम नहीं चाहते कि हमारी क्रूसीकंट्रोल.नेट साइट नीचे आए - हम सफलता के लिए जाँच करने के लिए एक निर्माण के दौरान पागलों की तरह "ताज़ा स्थिति" बटन पर क्लिक करते हैं!
जारोद डिक्सन

ठीक है, कैसे पहले कहीं और निर्माण के बारे में, फिर उस सर्वर पर सब कुछ करने के बजाय स्थिर फ़ाइल पर तैनात करना?
मार्क एलन

यह मुद्दा यहाँ नहीं है? किसी ने भी नहीं कहा कि फाइल को सर्वर पर सॉफ्टवेयर द्वारा संशोधित किया जा रहा है।
फ्लेवर्सस्केप

0

ध्यान दें: विंडोज़ फाइल लॉकिंग शब्दार्थों का विशेषज्ञ नहीं

जर्रॉड, क्या आप फ़ाइल का नाम बदलने के लिए सक्षम हैं। आप अपनी नई फ़ाइल को एक अस्थायी एक्सटेंशन के साथ बनाने में सक्षम हो सकते हैं, और फिर इसे वर्तमान फ़ाइल में बदल सकते हैं।

अगर विंडोज़ फ़ाइल लॉकिंग शब्दार्थ, POSIX वाले पाठकों के समान काम करते हैं, जो फ़ाइल पर एक वर्तमान रीड लॉक रखते हैं, तब भी पुरानी फ़ाइल को तब तक जारी रखना चाहिए जब तक कि वे अपनी रीड स्ट्रीम को बंद नहीं करते हैं, जबकि नए पाठक नई फ़ाइल खोलेंगे।


नहीं, हम IIS को पुनरारंभ होने तक फ़ाइल में कुछ भी करने में सक्षम नहीं हैं।
जारोड डिक्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.