फाइल लाइनक्स का नाम बदलने पर विवरण बदलने वाला [बंद]


-1

मुझे CentOS में एक प्रोग्राम मिला, जो एक फ़ाइल में अपना लॉग लिखता है। जब मैं इसका नाम बदल देता हूं, तब भी प्रोग्राम इसे लिखता है। क्या प्रोग्राम को पुनरारंभ किए बिना उस फ़ाइल डिस्क्रिप्टर को बदलने का कोई तरीका है?


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

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

कृपया नई जानकारी जोड़ने के लिए अपनी पोस्ट को संपादित करें, यह पढ़ना मुश्किल है और टिप्पणियों में याद करना आसान है। यह अभी भी स्पष्ट नहीं है। यदि आपको बैकअप की आवश्यकता है, तो फ़ाइल को कहीं और कॉपी करें, कुछ भी रोकने की आवश्यकता नहीं है। यदि आप इसका नाम बदलते हैं, तो प्रक्रिया अभी भी इसे कैसे लिख रही है? क्या यह एक नामित पाइप है? एक कड़ी? जब तक आप अधिक विवरण नहीं जोड़ते (हम आपके प्रश्न को संपादित करके ) आपकी मदद नहीं कर सकते ।
टेराडॉन

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

आपने अब केवल उल्लेख किया है कि आपको फ़ाइल को हटाने की आवश्यकता है। आपने यह नहीं बताया कि एक साधारण mv logfile logfile.bakपर्याप्त क्यों नहीं है। क्या आप कह रहे हैं कि प्रक्रिया लिखती रहेगी logfile.bak? जहां तक ​​मुझे पता है, यह संभव नहीं है। यह बस फिर से logfileलिखना और उस पर लिखना जारी रखेगा। यदि यह सब सच नहीं है, तो आपको हमें यह बताने की जरूरत है कि क्या प्रक्रिया और क्या फाइल सिस्टम है और एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दें क्योंकि आप कुछ ऐसा वर्णन करते हैं जो बेहद अजीब है।
टेराडॉन

जवाबों:


2

किसी तरह यह प्रक्रिया अभी भी एक फ़ाइल को लिखती है, भले ही मैंने इसका नाम बदल दिया हो।

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

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

ऐसा कुछ भी नहीं है जो आप अभी कर सकते हैं, अनुपस्थित डिबगर संलग्न करते हैं, जब तक कि कार्यक्रम समाप्त नहीं हो जाता। अगली बार, अपने कार्यक्रम को उसकी मानक त्रुटि या मानक आउटपुट में लॉग इन करने के लिए कहें, यदि वह संभव हो तो। तो फिर इस तरह के रूप में एक कार्यक्रम के लिए एक पाइप के माध्यम से है कि मानक त्रुटि / मानक आउटपुट भेजने multilog, multilog, s6-log, svlogd, tinylog, या cyclog। आपको लॉग फ़ाइल का साइज़-कैप्ड, स्वचालित रूप से साइकल, रोटेटेबल-ऑन-डिमांड सेट मिलेगा।

अगली बार कार्रवाई का एक अवर कोर्स फ़ाइल को एपेंड मोड में खोलना है। आपको लॉग की प्रतिलिपि बनाने और काट-छाँट करने के बारे में सोचना होगा, क्योंकि फ़ाइल का नाम बदलने से घूर्णन अभी भी काम नहीं करेगा; और निश्चित रूप से लॉग डेटा को खोने की क्षमता है, जैसा कि logrotateमैनुअल पेज कहता है, क्योंकि कॉपी बनाने और फ़ाइल को रौंदने के बीच अवसर की खिड़की के कारण। इसके विपरीत उपर्युक्त लॉगिंग टूल, newsyslogया के पसंद द्वारा लॉग रोटेशन के कारण अप्रत्याशित डेटा पर लॉग डेटा को नहीं खोते हैं logrotate( या जिसकी आवश्यकता नहीं है और उपयोग नहीं करता है)। एक प्रक्रिया पर्यवेक्षक के साथ संयोजन में उनका उपयोग करें जो पाइप को खुला रखता है, और जब वे एक पुन: कॉन्फ़िगर करते हैं और मक्खी पर लकड़हारा फिर से शुरू करते हैं तो वे लॉग डेटा भी नहीं खोते हैं।

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