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.
/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.
/etc/logrotate.d/httpd-prerotatetidak ada.
/usr/sbin/apachectl gracefulapakah menyebabkan segfault ketika dikeluarkan oleh logrotate, tetapi tidak ketika dikeluarkan secara manual? Odd
/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?