क्यों हर बार अपाचे सेग दोष के कारण logrotate है?


15

हर बार logrotateअपाचे / 2.4.7 (उबंटू) एक सेग गलती का अनुभव करता है और पुनः आरंभ नहीं होता है:

[Wed Sep 10 06:35:54.266018 2014] [mpm_event:notice] [pid 20599:tid 140630283466624] AH00493: SIGUSR1 received.  Doing graceful restart
[Wed Sep 10 06:35:54.885118 2014] [core:notice] [pid 20599] AH00060: seg fault or similar nasty error detected in the parent process

मेरी अपाचे लोगो की पटकथा इस प्रकार है:

/var/log/apache2/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/sbin/apachectl graceful
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

/srv/apache/log/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/sbin/apachectl graceful
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

मैं में डिफ़ॉल्ट लॉग रखते हैं /var/log/apache2, लेकिन मैं vhost विशिष्ट लॉग रखते हैं में (इस सर्वर पर होस्ट तीन अलग अलग vhosts के लिए) /srv/apache/logनिर्देशिका (जैसे mysite1_error.log, mysite1_access.log, mysite2_error.log, mysite2_access.log....)।

के प्रासंगिक भागों /etc/apache2/apache.conf:

#/etc/apache2/apache.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel trace8   # I set to try and get more info about this problem.
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

जहां export APACHE_LOG_DIR=/var/log/apache2$SUFFIX। मेरे vhost conf फ़ाइलों में, जैसे कि /etc/apache2/sites-enabled/mysite1.confमेरे पास है:

#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog  /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined

और अन्य साइटों के लिए समान है।

किसी को भी पता है कि क्यों लोग इस दुर्घटना का कारण बन रहा है?

एक और चीज़:

मूल रूप से logrotate को मूल रूप से मजबूर करना:

logrotate -v -f /etc/logrotate.d/apache2

सेग फॉल्ट का कारण नहीं बनता है, लेकिन मुझे पता है कि यह लॉगोटेट है जैसा कि मैंने समय (साप्ताहिक, दैनिक) के साथ खेलने की कोशिश की है और एसईजी गलती हमेशा ठीक वैसी ही होती है, जैसे लॉग केवल घुमाए जा रहे हैं।

मांग पर कैसे पुन: पेश करें

# Set a crontab to run each minute (simulating cron.daily run of logrotate)
crontab -e
*/1 * * * * root /usr/sbin/logrotate -v -f /etc/logrotate.d/apache2 > /home/myuser/logrotate.log 2>&1

आखिरकार

अगर मैं सेग फॉल्ट /srv/apache/log/*.logमें रोटेशन ब्लॉक पर टिप्पणी करता हूं, /etc/logrotate.d/apacheतो यह भी नहीं होता है।


त्रुटि संदेश ऐसा लगता /usr/sbin/apachectl gracefulहै कि अपराधी है (सिद्धांत स्क्रिप्ट में /etc/logrotate.d/httpd-prerotate भी उम्मीदवार हैं)। क्या आप /usr/sbin/apachectl gracefulमैन्युअल रूप से चलाकर पुष्टि कर सकते हैं ? जब अपाचे की वैश्विक त्रुटि (या वैश्विक syslog) में ऐसा होता है, तो कोई और संकेत होता है, हो सकता है कि जब आप LogLevel को न केवल <VirtualHost> बल्कि वैश्विक स्तर पर बढ़ाएं?
नेल्स टॉड्टमैन

/usr/sbin/apachectl gracefulसीएमडी लाइन पर मैन्युअल रूप से कोई समस्या नहीं होती है (यह भी ध्यान दें कि यह लाइन मूल रूप से थी /etc/init.d/apache2 reload > /dev/nullलेकिन एसईजी गलती होने के बाद, मैंने apachectlऑनलाइन पढ़ी गई सलाह पर बदल दिया , जाहिर है कि इससे चीजें ठीक नहीं हुईं)। LogLevel पहले से ही विश्व स्तर पर उच्चतम संभव है, में trace8सेट हैapache.conf फ़ाइल है।
fpghost

और बस इसे बाहर शासन करने के लिए: /etc/logrotate.d/httpd-prerotateमौजूद नहीं है।
fpghost

यह आमतौर पर एक मॉड्यूल को ठीक से बंद नहीं करने के कारण होता है। क्या आप किसी भी विदेशी मॉड्यूल का उपयोग कर रहे हैं? कुछ भी हाल ही में जोड़ा? 3-पार्टी मॉड्यूल? उन्हें अक्षम करने का प्रयास करें।
जियोवानी टरलोनी

तो /usr/sbin/apachectl gracefulलॉगगोट द्वारा जारी किए जाने पर सेगफॉल्ट हो रहा है, लेकिन मैन्युअल रूप से जारी किए जाने पर नहीं? अजीब
निल्स Toedtmann

जवाबों:


13

ऐसा लगता है कि अगर मैं सिर्फ एक ही ब्लॉक होने के लिए लॉगरेट स्क्रिप्ट को बदलता हूं, तो मुझे सेगफॉल्ट /var/log/apache2/*.log, /srv/apache/logs/*.log {....}नहीं मिलता है। तो यह सिर्फ दो ब्लॉक थे जो पहले पुनरारंभ के दौरान दूसरे पुनरारंभ प्रयास का कारण बन रहे थे ...

अगर मैं apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &cmd लाइन में प्रवेश करता हूं तो मेरा सिस्टम सेगफॉल्ट करता है, जिसकी पुष्टि होती है


1
मुझे यह सटीक समस्या है, लेकिन शुरू करने के लिए मेरी लॉग इन स्क्रिप्ट में केवल एक ब्लॉक। कोई विचार?
kontextify
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.