Logrotate neden Apache'nin her seferinde hataya neden olmasına neden oluyor?


15

Her logrotateçalıştırıldığında Apache / 2.4.7 (Ubuntu) bir seg hatası ile karşılaşır ve yeniden başlamaz:

[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

Apache logrotate betiğim şöyle görünüyor:

/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
}

Ben varsayılan günlükleri tutmak /var/log/apache2, ama sankonun belirli günlükleri tutmak içinde (bu sunucuda barındırılan üç farklı sankonlar için) /srv/apache/logdizinine (örneğin mysite1_error.log, mysite1_access.log, mysite2_error.log, mysite2_access.log....).

İlgili bölümler /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

nerede export APACHE_LOG_DIR=/var/log/apache2$SUFFIX. Benim vhost conf dosyalarımda olduğu gibi /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

ve diğer siteler için benzer.

Logrotate neden bu çökmeye neden olduğunu bilen var mı?

Bir şey daha:

Logrotate'i manuel olarak root olarak zorlamak:

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

seg hatasına neden olmaz, ancak zamanla (haftalık, günlük) oynamaya çalıştığım için logrotate olduğunu ve seg hatası her zaman günlüklerin yalnızca döndürüldüğü gibi gerçekleştiğini biliyorum.

Talep üzerine nasıl çoğaltılır

# 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

En sonunda

Ben seg hatası /srv/apache/log/*.logdöndürme bloğunu yorumlamak /etc/logrotate.d/apacheda meydana gelmez.


/usr/sbin/apachectl gracefulSuçlu gibi görünen hata mesajını oluşturun (teoride /etc/logrotate.d/httpd-prerotate içindeki komut dosyaları da adaydır). /usr/sbin/apachectl gracefulManuel olarak çalıştırarak onaylayabilir misiniz ? Bu, Apache'nin global hata günlüğünde (veya global syslog) gerçekleştiğinde, belki de LogLevel'i yalnızca <VirtualHost> içinde değil, global olarak artırdığınızda daha fazla ipucu var mı?
— Nils Toedtmann

/usr/sbin/apachectl gracefulcmd satırında manuel olarak sorunlara neden olmaz (Ayrıca bu satırın orijinal olduğunu /etc/init.d/apache2 reload > /dev/nullancak seg hatasını aldıktan sonra, apachectlçevrimiçi okuduğum tavsiyeye geçtim, açıkçası bir şeyleri düzeltmedi). LogLevel, dosyada trace8ayarlanmış halihazırda küresel olarak mümkün olan en yüksek seviyededir apache.conf.
— fpghost

Ve sadece dışlamak için: /etc/logrotate.d/httpd-prerotatemevcut değil.
— fpghost

Bu genellikle bir modülün düzgün kapanmamasından kaynaklanır. Herhangi bir egzotik modül kullanıyor musunuz? Son zamanlarda eklenen bir şey var mı? 3. taraf modülleri? Onları devre dışı bırakmayı deneyin.
— Giovanni Tirloni

Yani /usr/sbin/apachectl gracefullogrotate tarafından verilen zaman, fakat manuel verilmemiş zaman segfault neden oluyor? Tek
— Nils Toedtmann

Yanıtlar:


13

Logrotate betiğini tek bir blok olarak değiştirirsem, yani /var/log/apache2/*.log, /srv/apache/logs/*.log {....}segfault alamadım gibi görünüyor. Bu yüzden sadece iki blok ilk yeniden başlatma sırasında ikinci bir yeniden başlatma girişimine neden oluyordu ...

Eğer apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &cmd satırına girersem, sistemim segfault yapar, bu onaylıyor gibi görünüyor


1
Bu kesin bir sorun var, ama başlamak için benim logrotate script sadece bir blok. Herhangi bir fikir?
— 18
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.