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.