Trong cấu hình của tôi, tôi có rsyslog, người chịu trách nhiệm theo dõi các thay đổi của /home/user/my_app/shared/log/unicorn.stderr.log
việc sử dụng imfile
. Nội dung được gửi đến một máy chủ ghi nhật ký từ xa khác bằng TCP.
Khi tệp nhật ký quay, rsyslog dừng gửi dữ liệu đến máy chủ từ xa.
Tôi đã thử tải lại rsyslog, gửi tín hiệu HUP và khởi động lại hoàn toàn, nhưng không có gì hoạt động.
Cách duy nhất tôi có thể thấy rằng thực sự làm việc là bẩn:
- dừng dịch vụ, xóa các tập tin thống kê rsyslog và bắt đầu lại rsyslog. Tất cả điều đó trong một hook postrotate trong tập tin logrotate của tôi.
kill -9
rsyslog và bắt đầu lại.
Có cách nào thích hợp để tôi làm điều này mà không cần chạm vào nội bộ rsyslog không?
Tập tin Rsyslog
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[môi trường] [% syslogtag%] -% dir%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/ Shared / log / unicorn.stderr.log $ InputFileTag kỳ lân-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity thông tin $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Chuyển tiếp đến máy chủ từ xa nếu $ syslogtag chứa 'apache-' thì @@ my_server: 5000; WithoutTimeFormat : syslogtag, chứa, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Tập tin logrotate
/home/user/my_app/spl/log/*.log { hằng ngày mất tích ngày tháng xoay 30 nén đáng chú ý mở rộng gz bản sao tạo 640 người dùng chia sẻ sau xoay (dừng rsyslog && rm / var / spool / rsyslog / stat- * && bắt đầu rsyslog 2> & 1) || thật kết thúc }
FYI, tệp có thể đọc được cho người dùng rsyslog, máy chủ của tôi có thể truy cập và các tệp nhật ký khác không xoay trên cùng một chu kỳ tiếp tục được theo dõi chính xác.
Tôi đang chạy Ubuntu 12.04.
post-rotate
(không phải là vấn đề) thay vìpostrotate
, vì tập lệnh logrotate ban đầu mà bạn đã hoạt động tốt với rsyslog (nếu tập lệnh postrotate đã chạy ) ...?