모든 내용을 수동으로 삭제 한 후 Apache가 로그 파일에 쓰지 않습니다.


9

내용을 수동으로 삭제 한 후 Apache가 로그 파일 ( ErrorLog/ CustomLog)에 대한 쓰기를 거부하는 이유는 무엇 입니까?

Apache를 다시 시작할 때까지 해당 로그 파일에 다시 쓰지 않습니다.

왜 이런 경우입니까? Apache를 다시 시작하지 않고 어떻게 로그 파일을 안전하게 제거 할 수 있습니까?

우분투 10.04에 Apache 2.2.14가 있습니다.


내용을 어떻게 삭제합니까?
Dom

@Dom 방금 vim으로 열고 "dG"(모든 내용을 삭제)를 한 다음 "! wq"로 저장합니다. 소유권 / 그룹 / 권한은 변경되지 않습니다.
AtomicFault

3
@AtomicFault 그것은 아파치 로그를 회전시키는 방식이 아니기 때문에 분명 합니다. logrotate적절한 재로드 / 재시작 신호를 Apache로 보내는 것과 같은 것을 사용해야합니다 (아래 페드로의 답변 참조). 아파치는 여전히 이전 아이 노드에 기록되지 않습니다 (더 이상 파일 시스템에 연결되어있는 어디서든 당신이 그것을 얻을 수 있습니다) - Nickgrim는 "왜"당신의 로그 중지 뒤 덮여
voretaq7

답변:


14

방금 간단한 테스트를 수행했습니다.

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest

vimtest(이전 파일과 동일한 이름을 가진이기는하지만) 실제로 때문에 다른 파일을 편집을 한 후 다른 아이 노드 번호를 가지고 있으며,입니다.

따라서 vim으로 파일을 편집하면 이전 파일이 삭제되고 동일한 이름의 새 파일이 작성됩니다. 당신이보고있는 문제는 아파치가 여전히 오래된 (삭제 된) 파일에 쓰고 있기 때문에 발생합니다 (이것을 확인할 수 있습니다 lsof).

실제로 로그 파일을 자르려면 truncate -s 0 /path/to/file.log(제자리에서 잘리는 것)을 고려하십시오.


2
echo> /path/to/file.log도 작동합니다

8

다음을 사용하여 Apache2 로그 파일을 강제로 회전하는 것이 좋습니다 .

$ sudo logrotate -f /etc/logrotate.d/apache2

당신이에 보면 /etc/logrotate.d/apache2, 당신은 것을 볼 수 있습니다 Apache2구성과 로그 파일을 삭제 한 후 다시로드해야합니다 :

$ sudo /etc/init.d/apache2 reload

우분투에서는 다음과 같이 할 수 있습니다 :

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