लॉगस्ट्रॉप पर लॉग फ़ाइलों को फिर से खोलना नहीं है


10

हम अपने Ubuntu सर्वर पर अपनी सेवाओं का प्रबंधन करने के लिए upstart का उपयोग करते हैं। वे लॉग का उत्पादन करते हैं, जो /var/log/upstart/SERVICE_NAME.log पर लॉग आउट हैं

फिर प्रतिदिन, लॉग फाइल को लॉगऑप्शन स्क्रिप्ट का उपयोग करके घुमाया जाता है जो 12.04 LTS के साथ आती है:

/var/log/upstart/*.log {
        daily
        missingok
        rotate 7
        compress
        notifempty
        nocreate
}

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

init          1       root    8w      REG              202,1        64       2431 /var/log/upstart/dbus.log.1 (deleted)
init          1       root   13w      REG              202,1        95       2507 /var/log/upstart/acpid.log.1 (deleted)
init          1       root   14w      REG              202,1       127      17377 /var/log/upstart/whoopsie.log.1 (deleted)
init          1       root   36w      REG              202,1       122       6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init          1       root   37w      REG              202,1        30       6762 

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


मैं भी सिर्फ इस सामना किया है। यह बहुत अजीब है कि हमने इसे पहले नोटिस नहीं किया, जिससे मुझे लगता है कि यह हाल की बात हो सकती है।
पावेलर

1
इस पर किसी भी अद्यतन? १४.०४ को इसी मुद्दे को देखते हुए। इस nocreateनिर्देश के कारण, यह निश्चित नहीं है कि कोई भी इस निर्देश का उपयोग क्यों करेगा, विशेष रूप से उन सेवाओं के लिए जो संभावित रूप से आउटपुट का एक बहुत कुछ लिख सकते हैं
rynop

यह भी अनुभव करना।
Ztyx

1
मुझे यह बग
लिली

जवाबों:


2

मेरा मानना ​​है कि आपके पास 3 विकल्प हैं।

  1. आप "copytruncate" जोड़कर मौजूदा कॉन्फ़िगरेशन को संशोधित करते हैं

    /var/log/upstart/*.log { copytruncate daily missingok rotate 7 compress notifempty nocreate }

  2. यदि आप लॉग लॉग को पीड़ित नहीं करते हैं और उनके लिए काम नहीं करते हैं, तो मौजूदा लॉगरेट कॉन्फिगर को बदलने के लिए (या अनुमति नहीं है), तो अपनी "SERVICE_NAME.log" फ़ाइलों को एक नए फ़ोल्डर में ले जाएं / var / log यदि आपकी इच्छा है, तो "copytruncate" के साथ एक नया कॉन्फिगरेशन बनाएं और इसे cron.daily पर जोड़ें।

  3. क) यदि आपको होस्ट ओएस लॉगोट्रेट कॉन्फ़िगरेशन को बदलने या होस्ट ओएस के cron.daily से जोड़ने की अनुमति नहीं है, तो आपका तीसरा विकल्प स्क्रिप्ट या प्रोग्राम को बदलने के लिए है या तो यह जांचें कि फ़ाइल फ़ाइल से बाहर लिखने से पहले मौजूद है। बी) एक और तरीका ऊपर बिंदु 2 का एक सा है, जो आपके लॉगफाइल्स को कहीं और स्थानांतरित करने के लिए है और आपके भीतर स्क्रिप्ट या प्रोग्राम के अंदर, उस प्रोग्राम के लॉगफाइल के लिए विशिष्ट लॉग्रोट कमांड को निष्पादित करता है।

प्वाइंट 3 बी ऊपर अधिक मुश्किल है, लेकिन अधिक सुरुचिपूर्ण है और यह वही है जो मैं ज्यादातर समय का उपयोग करता हूं क्योंकि इसका मतलब है कि कार्यक्रम आत्मनिर्भर है और आत्म-प्रबंधित है और ओएस की नौकरियों को इसकी आवश्यकता नहीं है।

लॉगऑट्रेट को मैन्युअल रूप से चलाने और इसे अपने प्रोग्राम या स्क्रिप्ट में जोड़ने का तरीका जानने के लिए:

man logrotate

या

logrotate --help

यदि आप अपने कार्यक्रमों के लिए पायथन का उपयोग कर रहे हैं, तो आप यह देख सकते हैं कि यह प्रोग्राम अपनी लॉग फ़ाइलों को स्वयं प्रबंधित करने के लिए कैसे उपयोग करता है। http://bazaar.launchpad.net/~ferncasado/keep.awake/trunk/files/head:/v4/


0

पता चला, यह एक ज्ञात समस्या है और टिकट खुला रहता है क्योंकि मैं यह लिखता हूं।

सही बात यह है, शायद, /etc/logrotate.d/upstartपूरी तरह से हटाने के लिए और व्यक्तिगत सेवाओं की फ़ाइलों को व्यक्तिगत रूप से घुमाएं। क्योंकि निर्देशिका ( /var/log/upstart/) में विभिन्न सेवाओं के केवल स्टडआउट / स्टॉडर शामिल हैं - और डेमन के रूप में चलाने के लिए किसी भी सेवा का मतलब उन दो चैनलों पर आउटपुट नहीं होना चाहिए। सिवाय, शायद, बहुत स्टार्टअप पर।

सिस्टम मैं प्रबंध कर रहा हूँ, तीन सेवाओं नवोदय द्वारा चलाए जा रहे हैं: php5.6-fpm, php7.1-fpm, और acpid। तीन लॉग में से कोई भी सक्रिय नहीं है, लेकिन कभी-कभी fpm को इसकी मुख्य लॉग-फाइल ( /var/log/php5.6-fpm.log) को घुमाए जाने के कारण फिर से चालू किया जाता है - और यह इस शोर का कारण बनता है, क्योंकि यह स्टार्टअप में कुछ निर्जीवता का उत्पादन करता है।

यदि आप इन फ़ाइलों को वैसे भी घुमाने पर जोर देते हैं, तो आप इस तथ्य पर भरोसा कर सकते हैं, कि उनके नाम सेवाओं के नाम से मेल खाते हैं और निम्नलिखित postrotateस्क्रिप्ट का उपयोग करते हैं :

    postrotate
            service=${1##*/}
            service=${service%.log*}
            service $service restart > /dev/null
    endscript

ऊपर काम करने के लिए, क्रिया का उपयोग वहां नहीं करना सुनिश्चित करें sharedscripts- मेरा स्क्रिप्टलेट इस तथ्य पर निर्भर करता है, फ़ाइल का वास्तविक पथ पहले तर्क ( $1) के रूप में इसे पारित किया जाएगा ।

(पुनर्निर्देशन /dev/nullउपयोगी है, क्योंकि service-कमांड शोर है - और आप क्रोन द्वारा ऐसा शोर ई-मेल नहीं चाहते हैं। ध्यान दें, कि मैं stderrवहां पुनर्निर्देशित नहीं कर रहा हूं , केवल stdout- अगर कोई समस्या है, तो आप 'इसके बारे में अभी भी आपका ई-मेल मिलेगा।)

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