Apache2 và logrotate: delaycompress cần thiết?


8

Tôi hiện đang xem kích thước tệp nhật ký Apache của mình khi chúng trở nên khổng lồ. Trong cấu hình logrotate của tôi, tôi đã delaycompresskích hoạt. Apache có thực sự cần điều này không (như tài liệu logrotate nói rằng một số chương trình vẫn ghi trong tệp cũ) hoặc nó có an toàn để vô hiệu hóa delaycompresskhông?

Đây là cấu hình logrotate của tôi:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}

Câu trả lời:


7

Nếu bạn đang thực hiện khởi động lại Apache (hoặc thậm chí là 'duyên dáng'), nó sẽ đóng tay cầm tệp đang mở và mở lại chúng. Bạn không cần trì hoãn vì tệp sẽ bị đóng và mở lại như là một phần của quá trình khởi động lại postrotate của bạn.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Khởi động lại là một ý tưởng tồi - nếu tệp cấu hình vô tình thay đổi và không còn hiệu lực thì sao? Apache của bạn sẽ không bắt đầu sao lưu. Thay vào đó, gửi HUP tới tiến trình cha mẹ để bảo nó đóng / mở lại tệp xử lý.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

con mèo sẽ thất bại nếu thiếu PID (hoặc trống hoặc không hợp lệ) khiến cho kill cũng không thành công nên bạn không cần if..thenkhối xung quanh nó.


YMMV nhưng tôi tìm thấy điều này một câu trả lời đẹp
asdmin

0

Hrm, trong trường hợp này, có lẽ, vì Apache giữ các bản ghi mở.

Một điều bạn có thể thử là rotatelogskịch bản. Đây là một phần của apache2-utilsgói, ít nhất là ở đây trên máy trạm Ubuntu của tôi. Một cách tiếp cận khác là xoay chúng hàng ngày thay vì hàng tuần, do đó bạn sẽ đệm ít hơn trước khi nén.


Có lẽ nên thêm cấu hình logrotate của tôi trong câu hỏi trên - vì postrotate tôi đã thiết lập khởi động lại apache2.
j0nes
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.