Setiap kali logrotate
menjalankan 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/log
direktori (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.conf
saya 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/*.log
blok rotasi dalam /etc/logrotate.d/apache
kesalahan seg tidak terjadi juga.
sumber
/usr/sbin/apachectl graceful
adalah pelaku (dalam skrip teori dalam /etc/logrotate.d/httpd-prerotate juga kandidat). Bisakah Anda mengonfirmasi dengan menjalankan/usr/sbin/apachectl graceful
secara 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?/usr/sbin/apachectl graceful
secara manual di cmd line tidak menyebabkan masalah (Perhatikan juga bahwa baris ini awalnya/etc/init.d/apache2 reload > /dev/null
tetapi setelah mendapatkan kesalahan seg, saya beralih keapachectl
saran saya membaca online, jelas itu tidak memperbaiki keadaan). LogLevel sudah pada tingkat tertinggi sedunia, yangtrace8
diatur dalamapache.conf
file./etc/logrotate.d/httpd-prerotate
tidak ada./usr/sbin/apachectl graceful
apakah menyebabkan segfault ketika dikeluarkan oleh logrotate, tetapi tidak ketika dikeluarkan secara manual? OddJawaban:
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 mengkonfirmasisumber