2012-05-17 4 views
9

मुझे यह संदेश मिला - जब मैं एक फ़ाइल फ़ाइल निष्पादित करने का प्रयास करता हूं, तो "टेक्स्ट फ़ाइल व्यस्त" होती है, जबकि इस फ़ाइल को वर्तमान में अन्य प्रक्रियाओं द्वारा उपयोग किया जा रहा है।क्या "पाठ फ़ाइल व्यस्त" हो सकती है जब दो प्रक्रियाएं एक ही समय में एक perl फ़ाइल निष्पादित करने का प्रयास कर रही हैं?

इस /usr/bin/perl: bad interpreter: Text file busy के अनुसार, यह समस्या तब होती है जब जब मैं इसे निष्पादित करने का प्रयास करता हूं तो perl फ़ाइल लिखने के लिए खुली होती है।

लेकिन फ़ाइल की अनुमति -r-xr-xr-x है। यह लिखने के लिए अनुमति प्रदान नहीं करता है।

क्या "पाठ फ़ाइल व्यस्त" हो सकती है जब दो प्रक्रियाएं एक ही समय में एक perl फ़ाइल निष्पादित करने का प्रयास कर रही हैं?

+0

(यह एक सिस्टम प्रशासन सवाल का यकीनन अधिक है - यह ओएस पर निर्भर करता है - विशिष्ट अर्थशास्त्र और किसी भी तरह से पर्ल, या यहां तक ​​कि व्याख्या की गई भाषाओं के लिए विशिष्ट नहीं है - इसलिए भविष्य में, सर्वर फॉल्ट अधिक उचित स्थान हो सकता है) –

+0

टैग perl हटाया गया – joewhitedelux

उत्तर

10

नहीं, यह ऐसा नहीं होगा क्योंकि दो पर्ल स्क्रिप्ट एक ही समय में निष्पादित हो रही हैं।

अधिक संभावना स्पष्टीकरण यह है कि स्क्रिप्ट स्वयं लिखने के लिए खुली है जबकि ऑपरेटिंग सिस्टम उपयोग करने के लिए दुभाषिया निर्धारित करने के लिए अपनी शेबांग लाइन पढ़ने की कोशिश कर रहा है।

यह तब भी हो सकता है जब बाहरी प्रक्रिया पर्ल दुभाषिया को अपग्रेड या संशोधित करने का प्रयास कर रही हो, या साझा पुस्तकालयों में से एक पर निर्भर करता है। ध्यान दें कि फ़ाइल अनुमतियां आम तौर पर रूट जैसे सुपरसियर खातों पर लागू नहीं होती हैं, इसलिए सुपरसियर के रूप में चल रही कोई भी प्रक्रिया अभी भी +w बिट्स सेट होने के बावजूद पर्ल दुभाषिया को संशोधित करने का प्रयास कर सकती है।

(यह कहा गया है कि, पॉज़िक्स-स्टाइल ऑपरेटिंग सिस्टम पर सबसे अच्छी तरह से व्यवहार किए जाने वाले ऑपरेटिंग सिस्टम अपग्रेड टूल्स एक ही फाइल सिस्टम पर एक बाइनरी के अपग्रेड किए गए संस्करण को लिखेंगे, फाइल को बंद करते समय बंद करें, और इसे नाम दें मूल (एक परमाणु ऑपरेशन) - जैसे कि /usr/bin/perl पर संलग्न इनोड स्वयं लिखने के लिए कभी भी खुला नहीं होता है। ऐसे में, एक अच्छी तरह से व्यवहार प्रणाली पर, जो त्रुटि आप देख रहे हैं वह कुछ ऐसा नहीं है जो कभी भी अभ्यास में आना चाहिए) ।

आप या तो अपने स्क्रिप्ट के लिए या अपने दुभाषिया के लिए, जो एक फ़ाइल खुला है देखने के लिए fuser आदेश का उपयोग कर सकते हैं: के बाद आप लिखने के लिए स्क्रिप्ट को खोलने

$ sudo fuser /usr/bin/perl -uv 
        USER  PID ACCESS COMMAND 
/usr/bin/perl:  root  16579 f.... (root)python 
+0

आपके विस्तार के लिए धन्यवाद, चार्ल्स। यह perl फ़ाइल एक स्पष्ट दृश्य दृश्य के तहत रूट द्वारा निष्पादित की जाती है। आपकी पोस्ट पढ़ने के बाद, मुझे लगता है कि क्लीयरकेस दृश्य इस समस्या का कारण बनता है, वास्तविक perl फ़ाइल खुराक लेखन अनुमति प्रदान नहीं करता है, लेकिन स्पष्ट दृश्य दृश्य में फ़ाइल प्रदान कर सकती है। – joewhitedelux

2

But the file's permission is -r-xr-xr-x. It does not provide permissions to write.

अनुमति सेट किया जा सकता है, लेकिन स्क्रिप्ट चलाने से पहले।

यहां कोड उदाहरण है जो वर्तमान निर्देशिका में एक नई पर्ल स्क्रिप्ट your-script लिखता है, लिखने की अनुमतियों को हटाते समय इसे निष्पादन योग्य बनाता है, और पर्ल स्क्रिप्ट चलाने की कोशिश करता है। अंतिम अनुमतियाँ -r-xr-xr-x रहे हैं, लेकिन अभी भी फ़ाइल लेखन है यही कारण है कि स्क्रिप्ट "पाठ फ़ाइल व्यस्त" त्रुटि उत्पन्न के लिए खोला जाता है:

#!/usr/bin/env python3 
import os 
import stat 
import subprocess 

file = open('./your-script', 'w') # specify full path 
try: 
    file.write("#!/usr/bin/perl\nprint 'unreachable';") 
    file.flush() # make sure the content is sent to OS 
    os.chmod(file.name, 0o555) # make executable 
    print(stat.filemode(os.stat(file.name).st_mode)) # -r-xr-xr-x 
    subprocess.call(file.name) # run it 
except Exception as e: 
    print(e) 
finally: 
    os.remove(file.name) 
संबंधित मुद्दे