Mỗi lần logrotate
chạy Apache / 2.4.7 (Ubuntu) đều gặp lỗi seg và không khởi động lại:
[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
Kịch bản logrotate apache của tôi trông giống như:
/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
}
Tôi giữ các bản ghi mặc định trong /var/log/apache2
, nhưng tôi giữ các bản ghi cụ thể vhost (đối với ba vhosts khác nhau được lưu trữ trên máy chủ này) trong /srv/apache/log
thư mục (ví dụ mysite1_error.log
, mysite1_access.log
, mysite2_error.log
, mysite2_access.log
....).
Các phần có liên quan của /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
nơi export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
. Trong các tập tin conf vhost của tôi, chẳng hạn như
/etc/apache2/sites-enabled/mysite1.conf
tôi có:
#/etc/apache2/sites-enabled/mysite1.conf
LogLevel debug
ErrorLog /srv/apache/log/mysite1_error.log
CustomLog /srv/apache/log/mysite2_access.log combined
và tương tự cho các trang web khác.
Bất cứ ai cũng biết tại sao logrotate gây ra vụ tai nạn này?
Một điều nữa:
Buộc thủ công logrotate như root:
logrotate -v -f /etc/logrotate.d/apache2
không gây ra lỗi seg, nhưng tôi biết đó là logrotate vì tôi đã thử chơi với thời gian (hàng tuần, hàng ngày) và lỗi seg luôn xảy ra chính xác khi các bản ghi chỉ được xoay.
Cách sản xuất theo yêu cầu
# 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
Cuối cùng
Nếu tôi nhận xét /srv/apache/log/*.log
khối xoay trong /etc/logrotate.d/apache
lỗi seg cũng không xảy ra.
/usr/sbin/apachectl graceful
thủ công ở dòng cmd không gây ra vấn đề gì (Cũng lưu ý rằng dòng này ban đầu /etc/init.d/apache2 reload > /dev/null
nhưng sau khi gặp lỗi seg, tôi đã đổi thành apachectl
lời khuyên tôi đọc trực tuyến, rõ ràng là nó không sửa được mọi thứ). LogLevel đã ở mức cao nhất có thể trên toàn cầu, trace8
được đặt trong apache.conf
tệp.
/etc/logrotate.d/httpd-prerotate
không tồn tại.
/usr/sbin/apachectl graceful
gây ra một segfault khi được phát hành bởi logrotate, nhưng không phải khi được phát hành thủ công? Odd
/usr/sbin/apachectl graceful
là người vi phạm (trong các tập lệnh lý thuyết trong /etc/logrotate.d/httpd-prerotate cũng là ứng cử viên). Bạn có thể xác nhận bằng cách chạy/usr/sbin/apachectl graceful
thủ công? Có thêm gợi ý nào khi điều này xảy ra trong lỗi toàn cầu của Apache (hoặc syslog toàn cầu) không, có thể khi bạn tăng LogLevel không chỉ trong <Virtualhost> mà còn trên toàn cầu?