Mengapa logrotate menyebabkan Apache melakukan kesalahan setiap kali?

15

Setiap kali logrotatemenjalankan Apache / 2.4.7 (Ubuntu) mengalami kesalahan seg dan tidak memulai ulang:

[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

Skrip logrotate apache saya terlihat seperti:

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

Saya menjaga log default dalam /var/log/apache2, tapi aku tetap log yang spesifik vhost (untuk tiga vhosts yang berbeda host di server ini) di /srv/apache/logdirektori (misalnya mysite1_error.log, mysite1_access.log, mysite2_error.log, mysite2_access.log....).

Bagian yang relevan dari /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

mana export APACHE_LOG_DIR=/var/log/apache2$SUFFIX. Dalam file conf vhost saya, seperti yang /etc/apache2/sites-enabled/mysite1.confsaya miliki:

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

dan serupa untuk situs lain.

Adakah yang tahu mengapa logrotate menyebabkan crash ini?

Satu hal lagi:

Memaksa logrotate secara manual sebagai root:

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

tidak menyebabkan kesalahan seg, tapi saya tahu itu logrotate karena saya sudah mencoba bermain dengan waktu (mingguan, setiap hari) dan kesalahan seg selalu terjadi persis seperti log diputar saja.

Cara mereproduksi sesuai permintaan

# 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

Akhirnya

Jika saya berkomentar /srv/apache/log/*.logblok rotasi dalam /etc/logrotate.d/apachekesalahan seg tidak terjadi juga.

fpghost
sumber
Bentuk pesan kesalahan sepertinya /usr/sbin/apachectl gracefuladalah pelaku (dalam skrip teori dalam /etc/logrotate.d/httpd-prerotate juga kandidat). Bisakah Anda mengonfirmasi dengan menjalankan /usr/sbin/apachectl gracefulsecara manual? Apakah ada petunjuk lagi ketika ini terjadi di kesalahan global Apache (atau syslog global), mungkin ketika Anda meningkatkan LogLevel tidak hanya dalam <VirtualHost> tetapi secara global?
Nils Toedtmann
/usr/sbin/apachectl gracefulsecara manual di cmd line tidak menyebabkan masalah (Perhatikan juga bahwa baris ini awalnya /etc/init.d/apache2 reload > /dev/nulltetapi setelah mendapatkan kesalahan seg, saya beralih ke apachectlsaran saya membaca online, jelas itu tidak memperbaiki keadaan). LogLevel sudah pada tingkat tertinggi sedunia, yang trace8diatur dalam apache.conffile.
fpghost
Dan hanya untuk mengesampingkannya: /etc/logrotate.d/httpd-prerotatetidak ada.
fpghost
Ini biasanya disebabkan oleh modul yang tidak dimatikan dengan benar. Apakah Anda menggunakan modul eksotis? Adakah yang ditambahkan baru-baru ini? Modul pihak ke-3? Coba nonaktifkan mereka.
Giovanni Tirloni
Jadi /usr/sbin/apachectl gracefulapakah menyebabkan segfault ketika dikeluarkan oleh logrotate, tetapi tidak ketika dikeluarkan secara manual? Odd
Nils Toedtmann

Jawaban:

13

Tampaknya jika saya hanya mengubah skrip logrotate menjadi satu blok, artinya /var/log/apache2/*.log, /srv/apache/logs/*.log {....}saya tidak mendapatkan segfault. Jadi itu hanya dua blok yang menyebabkan upaya restart kedua selama restart pertama ...

Jika saya memasukkan apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &pada baris cmd sistem saya TIDAK melakukan segfault, yang tampaknya mengkonfirmasi

fpghost
sumber
1
Saya memiliki masalah ini, tetapi hanya satu blok dalam skrip logrotate saya untuk memulai. Ada ide?
kontextify