লোগ্রোটেট প্রতিবার কেন আপাচে দোষ চাপিয়ে দিচ্ছে?


15

প্রতিবার logrotateঅ্যাপাচি / ২.৪..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। আমার ভোস্ট কনফ ফাইলগুলিতে যেমন /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 -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নিজে চালিয়ে নিশ্চিত করতে পারবেন ? অ্যাপাচি-র গ্লোবাল ত্রুটিমুক্ত (বা গ্লোবাল সিসলগ) এ যখন ঘটে তখন কি আরও কোনও ইঙ্গিত পাওয়া যায়, আপনি যখন কেবল <ভার্চুয়ালহস্ট> এর মধ্যেই নয় বিশ্বব্যাপী লগলভিল বাড়িয়ে তোলেন?
নিলস টোডটম্যান

/usr/sbin/apachectl gracefulম্যানুয়ালি সেন্টিমিড লাইনে কোনও সমস্যা হয় না (এছাড়াও নোট করুন যে এই লাইনটি মূলত /etc/init.d/apache2 reload > /dev/nullকিন্তু সেগ ত্রুটি পাওয়ার পরে apachectlআমি অনলাইনে পড়ার পরামর্শে পাল্টেছি, স্পষ্টত এটি জিনিসগুলি ঠিক করে নি)। লগলভিলটি ইতিমধ্যে বিশ্বব্যাপী সর্বাধিক সম্ভব, ফাইলে trace8সেট করা আছে apache.conf
fpghost

এবং কেবল এটি বাতিল করার জন্য: /etc/logrotate.d/httpd-prerotateঅস্তিত্ব নেই।
fpghost

এটি সাধারণত কোনও মডিউল সঠিকভাবে বন্ধ না করায় ঘটে থাকে। আপনি কি কোনও বিদেশী মডিউল ব্যবহার করছেন? কিছু যুক্ত হয়েছে সম্প্রতি? তৃতীয় পক্ষের মডিউলগুলি? এগুলি অক্ষম করার চেষ্টা করুন।
জিওভান্নি তিরলনি

সুতরাং /usr/sbin/apachectl gracefulলোগ্রোটেট জারি করার সময় সেগফল্টের কারণ হয়ে থাকে, তবে ম্যানুয়ালি জারি করা হয় না তখন? অদ্ভুত
নিলস টোডটম্যান

উত্তর:


13

দেখে মনে হচ্ছে যে আমি যদি লোগ্রোটেট স্ক্রিপ্টটি একক ব্লক হিসাবে পরিবর্তন করি, তবে আমি সেগফল্টটি /var/log/apache2/*.log, /srv/apache/logs/*.log {....}পাই না। সুতরাং কেবলমাত্র দুটি ব্লকই প্রথম পুনঃসূচনা চলাকালীন দ্বিতীয় পুনরায় আরম্ভের চেষ্টা করেছিল ...

আমি যদি apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &সিএমডি লাইনে প্রবেশ করি তবে আমার সিস্টেমটি সেগফল্টটি করে, যা নিশ্চিত হয়ে গেছে


1
আমার এই সঠিক সমস্যাটি রয়েছে তবে আমার লোগ্রোটেট স্ক্রিপ্টে কেবল একটি ব্লক দিয়ে শুরু করতে হবে। কোন ধারনা?
কনটেক্সটিফাই করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.