크론 작업에서 nginx logrotate 오류


10

Digital Ocean VPS에서 Ubuntu 14.04 LTS 및 nginx를 실행하고 있으며 때때로 실패한 크론 작업에 대한 다음 이메일을 수신합니다.

제목

크론 테스트 -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.daily)

이메일 본문은 다음과 같습니다.

/etc/cron.daily/logrotate : 오류 : '/var/log/nginx/*.log'run-parts에 대한 공유 postrotate 스크립트 실행 중 오류 : /etc/cron.daily/logrotate가 리턴 코드 1로 종료되었습니다.

이 문제를 어떻게 해결할 수 있습니까?

최신 정보:

/var/log/nginx/*.log {
  weekly
  missingok 
  rotate 52 
  compress 
  delaycompress
  notifempty 
  create 0640 www-data adm
  sharedscripts
  prerotate
      if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
          run-parts /etc/logrotate.d/httpd-prerotate; \
      fi
  endscript 
  postrotate 
      invoke-rc.d nginx rotate >/dev/null 2>&1
  endscript 
}

최신 정보:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.

그것은 우리에게 쇼, postrotate 작업으로 지정된 것을 당신 실행할 수 없습니다처럼 보이는 /etc/logrotate.d/nginix스크립트
X 티안

/var/log/nginx/*.log {매주 missingok 회전 52 압축 지연 압축 통지가 0640 www-data adm 공유 스크립트를 생성하는 경우 [-d /etc/logrotate.d/httpd-prerotate]; 그런 다음 \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endscript postrotate invoke-rc.d nginx 회전> / dev / null 2> & 1 endscript}
Chris

1
요청시 추가 정보로 질문을 업데이트하는 것이 일반적입니다. 각 줄의 시작 부분에 4 개의 공백이 있으면 코드 블록이됩니다.
X Tian

따라서 invoke-rc.d nginx rotate실패합니다. 적절한 사용자로 실행하고 해당 스크립트도 표시하여 원래 질문에 출력을 붙여 넣으십시오. tks.
X Tian

실행을 시도했지만 유효하지 않은 명령 오류가 발생했습니다.
Chris

답변:


10

포스트 로테이션 동작이 올바르지 않은 것 같습니다

시험

invoke-rc.d nginx reload >/dev/null 2>&1

nginx명령 을 보면 수락 할 동작을 볼 수 있습니다. 또한 당신이받은 메시지 확인initctl --help

xtian@fujiu1404:~/tmp$ initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

따라서 재로드가 작동하고 NUPx에 HUP 신호를 보내서 로그 파일을 강제로 다시 열어야합니다.


감사합니다. 해당 명령이 오류없이 실행 된 것 같습니다. 나는 cron 작업을 업데이트하고 거기서 갈 것입니다.
Chris

4

다른 답변에서 언급했듯이 문제는 작업이 지원되지 않는다는 invoke-rc.d nginx rotate오류 를 반환한다는 것입니다 rotate. 흥미로운 것은 service nginx rotate문제없이 작동 한다는 것입니다 .

내 생각에 invoke-rc.d래퍼는 실제 nginx init 스크립트가 지원하는 모든 동작을 지원하지는 않습니다.

변경 invoke-rc.d nginx rotate하려면 service nginx rotate문제를 해결해야한다.


3

initctl복용량이 rotate옵션을 지원하지 않기 때문에 , 그리고 제거되었을 때 확실 하지 않지만, 이것에 의해 영향을받는 유일한 사람은 아니며, 런치 패드에 공개 버그 보고서가 있습니다.

위의 다른 답변과 아래에서 언급했듯이 nignx logrotate 파일을 편집하고 problmatic 줄을 바꿀 수 있습니다

invoke-rc.d nginx reload >/dev/null 2>&1

작동하는 다른 대안으로

start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
# or 
service nginx rotate >/dev/null 2>&1
# or
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

어떤 방법을 선택하든 패키지가 관리하는 파일을 변경하지 말고 변경 한 후에는 더 이상 업데이트되지 않으므로 diff를 수동으로 해결하거나 aff로 덮어 써야합니다 새로운 것 (모두 준비된 수정 사항 포함).


"서비스 명령이 작동하지 않습니다"버그가 여기에 적용되는지 확실하지 않습니다. 각 버그마다 다른 문제가 있기 때문입니다. (재미있는 사실 : 1450770 년의 작품에 대한 수정 사항이 있습니다)
Thomas Ward

1

나를 위해 일한 :
대체
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
와 함께
postrotate service nginx rotate >/dev/null 2>&1


0

바꾸다:

invoke-rc.d nginx reload >/dev/null 2>&1

와:

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

Nginx의 최신 버전에서 작동합니다. 1.9 버전을 실행 중입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.