2009-04-20 12 views
6

tar -xvzf $ filename.tar.gz || {बाहर निकलें $ ?; }त्रुटि कोड 141 टैर

यहाँ मेरी स्क्रिप्ट errorCode 141 के साथ बाहर निकलने मैं Fedora Core 6 का उपयोग कर रहा टार संस्करण 1.15

यह हर समय नहीं होते साथ होगा, लेकिन समय यह विफल रहता है 70 से अधिक प्रतिशत।

उत्तर

0

एक कामकाज के रूप में हम अब संग्रह के लिए सीपीओ का उपयोग कर रहे हैं, जो अब हमारे लिए ठीक काम करता है, हालांकि मैं जानना चाहता हूं कि क्यों इस मुद्दे का कारण बन रहा है, यह लंबे समय तक है, और वर्षों के लिए मानक उपकरण के रूप में उपयोग किया जा रहा है।

1

जीएनयू टैर केवल कुछ चीजें देता है, उनमें से कोई भी -141 नहीं है। हालांकि, अगर यह उप-प्रोसेस चला रहा है, जैसे कि gzip, और यह प्रक्रिया असामान्य रूप से समाप्त हो जाती है, तो यह देता है जो रिटर्न कोड देता है।

मुझे यकीन नहीं है कि उपप्रोसेस क्या हो सकता है। --verbose के साथ इसे आज़माएं और देखें कि क्या आपको कोई सुराग मिलता है या नहीं।

+0

मैंने अपनी स्क्रिप्ट को गनज़िप $ filname.tar.gz करने के लिए बदल दिया; tar -xvf $ filename.tar फिर से इसके टैर जो 141 ​​ –

+0

के साथ विफल रहता है क्या आपने इसे --verbose के साथ चलाने का प्रयास किया था, और क्या आपको कोई सुराग मिला?टैर रिमोट टेप के लिए आरएमटी भी चलाता है; एक अंतःस्थापित समस्या टेप ड्राइव के साथ एक नेटवर्क मुद्दा हो सकता है। यह जानकर कि आप कौन सी ओएस चल रहे हैं, मदद कर सकते हैं। –

+0

ओह, ओएस को कभी भी ध्यान न दें, मैं इसे अब देखता हूं। –

15

मुझे एहसास है कि यह धागा कुछ साल से अधिक पुराना है, लेकिन मैं उन लोगों के लिए टिप्पणी कर रहा हूं जो इस थ्रेड पर त्रुटि के साथ ठोकर खा रहे हैं।

जब भी आप संपीड़न विकल्प का उपयोग करते हैं, तो टैर अंतर्निहित प्रोग्राम को एक पाइप का उपयोग करके एक कनेक्शन खोलता है। तो, ओपी के उदाहरण में: tar -xvzf $filename.tar.gz, वास्तव में क्या टैर वास्तव में ऐसा कुछ चलाएगा: gunzip $filename.tar.gz | tar -xv -। आप top चलाकर इसे सत्यापित कर सकते हैं, जहां आप दो प्रक्रियाएं देखेंगे (एक टैर के लिए और एक gzip के लिए)।

कभी-कभी, पाइपलाइन स्वयं टूट जाती है। उदाहरण के लिए, अगर फ़ाइल एक gzip फ़ाइल नहीं है। उदाहरण के लिए इसे लें: tar -xvzf somefile.iso, जो gunzip somefile.iso | tar -xv - के बराबर होगा। ऐसी स्थिति में, gzip त्रुटि होगी। जब gzip त्रुटियां बाहर होती हैं, तो पाइपलाइन टूट जाएगी। एक और संभावना यह होगी कि gzip फ़ाइल सही थी, लेकिन इसके अंदर टैर फ़ाइल दूषित थी। इस मामले में, gzip असम्पीडित स्ट्रीम को टैर पर भेजना शुरू कर देता है, लेकिन फिर टैर महसूस करता है कि कुछ गलत है और स्ट्रीम बंद कर देता है। यहां gzip फिर त्रुटि होगी, क्योंकि यह आउटपुट बंद है।

बाहर निकलने वाले मूल्यों में, 128 से ऊपर का मान सिग्नल के कारण समाप्ति को इंगित करता है, और 128 से ऊपर की राशि दर्शाती है कि किस सिग्नल को समाप्त करने का कारण बनता है। इसलिए, यदि हम 141 के ओपी के एक्ज़िट कोड से 128 घटाते हैं, तो हमें 13 मिलते हैं, जो सिग्पिप (man 7 signal मानक संकेतों और उनके संबंधित पूर्णांक मानों की सूची के लिए) से मेल खाता है।

मैन पेज एसआईजीपीआईपीई की टिप्पणी को "टूटा हुआ पाइप: कोई पाठक के साथ पाइप पर लिखें" के रूप में सूचीबद्ध करता है। तो फिर, ऐसा लगता है कि gzip पाइप को लिखने की कोशिश कर रहा है, लेकिन टैर सुनना बंद कर दिया है। मेरा अनुमान है कि gzip फ़ाइल को सफलतापूर्वक असम्पीडित कर रहा है, लेकिन असम्पीडित स्ट्रीम मान्य टैर संग्रह नहीं है। मेरी सलाह यहां फाइल पर गनज़िप चलाने के लिए होगी, फिर परिणाम फ़ाइल पर टैर चलाएं और देखें कि कौन सा विफल रहता है (सिगिपी के आधार पर, मेरा अनुमान है कि टैर असफल हो जाएगा)। किसी भी मामले में, ऐसा लगता है कि फ़ाइल टूल्स के इन संस्करणों (या तो भ्रष्टाचार या किसी प्रकार का संस्करण संघर्ष) द्वारा पठनीय नहीं है।

इन फ़ाइलों को कैसे बनाया गया था (टैर के लिए कौन से विकल्प आदि)? क्या वे इस मशीन या किसी अन्य मशीन पर बनाए गए हैं? यदि आप इस मशीन पर .tar.gz फ़ाइल बनाते हैं, तो क्या यह मशीन त्रुटि के बिना उन फ़ाइलों को निकाल सकती है?

+0

धन्यवाद! समझ में आता है। मुझे टैर -xzf का उपयोग करते समय त्रुटि 141 मिली जब एक टैर कमांड के पहले कमांड द्वारा मारे गए एक प्रक्रिया द्वारा लॉन्च किया गया था। मेरा समाधान टैरिबॉल निकालने के बाद तक बाल प्रक्रिया द्वारा माता-पिता की प्रक्रिया की हत्या में देरी करना था। यह संभव है कि टैर के आउटपुट को रीडायरेक्ट करने में मदद मिली हो लेकिन मैंने कोशिश नहीं की। –

+0

यह तब भी हो सकता है जब 'tar' के आउटपुट को दूसरी प्रक्रिया में पाइप किया जाता है जो पाइप को जल्दी बंद करता है उदा। 'tar -tf x.tar | सिर 'या 'tar -tf x.tar | grep -q .' ('head' लाइनों की निर्दिष्ट संख्या पढ़ने के बाद पाइप बंद कर देता है, 'grep -q' जैसे ही पैटर्न देखा जाता है, पाइप बंद कर देता है।) – bain