Apache từ chối ghi vào tệp nhật ký sau khi tôi xóa thủ công tất cả nội dung của nó


9

Tại sao Apache từ chối ghi vào các tệp nhật ký (cái ErrorLog/ CustomLogcái) sau khi tôi đã xóa thủ công nội dung của chúng?

Nó sẽ không ghi vào các tệp nhật ký đó cho đến khi tôi khởi động lại Apache.

Tại sao điều này là trường hợp? Làm cách nào tôi có thể xóa tệp nhật ký một cách an toàn mà không phải khởi động lại Apache?

Tôi có Apache 2.2.14 trên Ubuntu 10.04.


Làm thế nào để bạn xóa nội dung?
Dom

@Dom Tôi chỉ cần mở nó bằng vim, làm "dG" (xóa tất cả nội dung), rồi lưu với "! Wq". Quyền sở hữu / nhóm / quyền không được thay đổi.
AtomicFault

3
@AtomicFault Đáng tin cậy vì đó không phải là cách bạn phải xoay vòng nhật ký Apache . Bạn nên sử dụng một cái gì đó giống như logrotategửi tín hiệu tải lại / khởi động lại thích hợp tới Apache (Xem câu trả lời của Pedro bên dưới). Nickgrim bảo vệ "tại sao" đằng sau nhật ký của bạn dừng lại - Apache vẫn đang ghi vào nút cũ (không còn kết nối với hệ thống tệp ở bất cứ nơi nào bạn có thể nhận được ở đó)
voretaq7

Câu trả lời:


14

Tôi vừa làm một bài kiểm tra ngắn:

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

Lưu ý rằng vimtestcó một số inode khác sau khi chỉnh sửa nó, và do đó thực sự là một tệp khác (mặc dù có cùng tên với tệp cũ).

Vì vậy, khi bạn chỉnh sửa tệp bằng vim, nó sẽ xóa tệp cũ và tạo một tệp mới có cùng tên. Vấn đề bạn gặp phải là do Apache vẫn ghi vào tệp cũ (đã xóa) (bạn có thể kiểm tra vấn đề này với lsof).

Nếu bạn thực sự muốn cắt bớt một tệp nhật ký, hãy xem xét truncate -s 0 /path/to/file.log(có vẻ như cắt ngắn tại chỗ)


2
echo> /path/to/file.log cũng hoạt động

8

Tôi khuyên bạn nên buộc xoay vòng các tệp nhật ký Apache2 bằng:

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

Nếu bạn nhìn vào /etc/logrotate.d/apache2, bạn sẽ thấy rằng Apache2cấu hình phải được tải lại sau khi xóa tệp nhật ký của nó với:

$ sudo /etc/init.d/apache2 reload

Trên Ubuntu, bạn có thể thay thế:

$ sudo service apache2 reload
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.