logrotate로 인해 Apache가 매번 결함을 일으키는 이유는 무엇입니까?


15

logrotateApache / 2.4.7 (Ubuntu)을 실행할 때마다 세그먼트 오류가 발생하고 다시 시작되지 않습니다.

[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

내 아파치 logrotate 스크립트는 다음과 같습니다.

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

나는의 기본 로그를 유지 /var/log/apache2,하지만 난 가상 호스트 특정 로그를 지키는에서 (이 서버에 호스팅 된 세 가지 가상 호스트에 대한) /srv/apache/log디렉토리 (예를 들어 mysite1_error.log, mysite1_access.log, mysite2_error.log, mysite2_access.log....).

관련 부분 /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

어디서 export APACHE_LOG_DIR=/var/log/apache2$SUFFIX? 내 vhost conf 파일 /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

다른 사이트에서도 비슷합니다.

왜 logrotate 가이 충돌을 일으키는 지 알고 있습니까?

하나 더:

logrotate를 루트로 수동 강제 설정 :

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

seg 오류가 발생하지는 않지만 시간 (매주, 매일)으로 재생을 시도했을 때 로그 회전하고 로그가 회전하는 동안 seg 오류가 항상 정확하게 발생한다는 것을 알고 있습니다.

주문형 재생산 방법

# 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

드디어

세그 폴트 /srv/apache/log/*.log에서 회전 블록을 주석 처리하면 /etc/logrotate.d/apache발생하지 않습니다.


/usr/sbin/apachectl graceful가해자 인 것처럼 보이는 오류 메시지를 작성합니다 (/etc/logrotate.d/httpd-prerotate 내의 이론 스크립트도 후보입니다). /usr/sbin/apachectl graceful수동으로 실행하여 확인할 수 있습니까 ? 이 문제가 Apache의 전역 오류 로그 (또는 전역 syslog)에서 발생할 때, <VirtualHost> 내 에서뿐만 아니라 전역으로 LogLevel을 증가시킬 때 더 많은 힌트가 있습니까?
Nils Toedtmann

/usr/sbin/apachectl gracefulcmd 줄에서 수동으로 문제가 발생하지 않습니다 (이 줄은 원래 /etc/init.d/apache2 reload > /dev/null있지만 세그 결함이 발생한 후 apachectl온라인에서 읽은 조언으로 변경 했지만 분명히 문제가 해결되지 않았습니다). LogLevel은 이미 파일 trace8에서 설정 한 전체 최고 수준 apache.conf입니다.
fpghost

그리고 그것을 배제하기 위해 : /etc/logrotate.d/httpd-prerotate존재하지 않습니다.
fpghost

이것은 일반적으로 모듈이 올바르게 종료되지 않기 때문에 발생합니다. 이국적인 모듈을 사용하고 있습니까? 최근에 추가 한 것이 있습니까? 타사 모듈? 비활성화하십시오.
Giovanni Tirloni 2018 년

그래서 /usr/sbin/apachectl gracefullogrotate에 의해 발행 될 때 segfault가 발생하지만 수동으로 발행되지는 않습니까? Odd
Nils Toedtmann

답변:


13

logrotate 스크립트를 단일 블록으로 변경 /var/log/apache2/*.log, /srv/apache/logs/*.log {....}하면 segfault를 얻지 못하는 것 같습니다. 첫 번째 다시 시작하는 동안 두 블록만으로 두 번째 다시 시작 시도가 발생했습니다 ...

apache2ctl graceful & apache2ctl graceful & apache2ctl graceful & apache2ctl graceful &cmd 줄에 시스템을 입력하면 segfault가 수행됩니다.


1
이 정확한 문제가 있지만 logrotate 스크립트에서 하나의 블록 만 시작하십시오. 어떤 아이디어?
kontextify
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.