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

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

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

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

우분투 10.04에 Apache 2.2.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(제자리에서 잘리는 것)을 고려하십시오.


답변

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

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

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

$ sudo /etc/init.d/apache2 reload

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

$ sudo service apache2 reload


답변