एक फ़ाइल को घुमाएँ जो खुली है और हर समय लिखी जा रही है


10

मेरे पास एक लिनक्स एप्लिकेशन है जो लगातार लॉग फ़ाइल में लॉगिंग जानकारी लिखता है, जैसे। /var/log/application.log। चूंकि एप्लिकेशन स्वचालित रूप से फ़ाइल को घुमाता नहीं है, यह लॉग फ़ाइल कुछ हफ्तों में गीगाबाइट के आकार तक पहुंच सकती है, इसलिए मैं इस फ़ाइल को ठीक से घुमाने में सक्षम होना चाहता हूं

मेरी मुख्य चिंता यह है कि हर समय एप्लिकेशन द्वारा खोली गई फ़ाइल को घुमाने के लिए, मुझे संभवतः इसकी आवश्यकता होगी:

  1. फ़ाइल को इसके घुमाए गए रूप में ले जाएं /var/log/application.log -> /var/log/application.log.2013-01-28

  2. एक रिक्त बनाएँ /var/log/application.logअवलोकन: इस बिंदु पर आवेदन प्रक्रिया अभी भी लिख रही है/var/log/application.log.2013-01-28

  3. एप्लिकेशन प्रक्रिया के फ़ाइल डिस्क्रिप्टर को फिर से इंगित करने के लिए बदलें /var/log/application.log

तो, क्या मैं सही हूं? यदि हां, तो मैं यह कैसे कर सकता हूं? (मुख्य रूप से फ़ाइल डिस्क्रिप्टर भाग को बदलते हुए)

अगर मैं नहीं हूं, तो इसका सही तरीका क्या है और इसे कैसे किया जाए?


क्या आपको फ़ाइल को साफ़ करने या बस इसे घुमाने की ज़रूरत है?
ewwhite

क्या आवेदन? आवेदन को ठीक से करने के लिए समर्थन प्रदान करना है। (अन्यथा, आप एक बहुत ही बदसूरत चीज कर सकते हैं - प्रक्रिया से जुड़ सकते हैं, नई फ़ाइल खोल सकते हैं, dup2पुराने पर नया डिस्क्रिप्टर, फिर नया डिस्क्रिप्टर बंद कर सकते हैं।)
डेविड श्वार्ट्ज

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

@ मुझे इसे घुमाने की जरूरत है, मैं लॉग डेटा खोना बर्दाश्त नहीं कर सकता
ब्रूनो पोलाको

जवाबों:


11

logrotateउपयोग करने के लिए एक विन्यास लिखेंcopytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

दिलचस्प है, फ़ाइल को कॉपी करने के बाद ट्रंक करना डेटा हानि मार्जिन के साथ भी काफी चालाक लगता है। मैं लॉगऑट्रेट पर इस विकल्प को नोटिस नहीं किया। अंतर्दृष्टि के लिए Thx :)
ब्रूनो पोलाको

1

इस तरह के अधिकांश एप्लिकेशन सिग्नल का जवाब देते हैं, जैसे कि SIGHUP, और सिग्नल मिलने पर अपनी लॉग फाइल को बंद और फिर से खोल देंगे। सही संकेत भेजने के लिए अपने आवेदन के दस्तावेज की जाँच करें।


और अगर ऐसा नहीं होता है, तो आप एप्लिकेशन को एक कमबैक के रूप में पुनः आरंभ कर सकते हैं। यह वही है जो आमतौर पर syslog करता है, और काफी कुछ अन्य कार्यक्रम।
lsd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.