2013-03-27 16 views
9

Tôi đã thêm hai tập lệnh trong thư mục "logrotate.d" cho nhật ký ứng dụng của mình để được xoay. Đây là cấu hình cho một trong số họ:công việc cron logrotate không xoay các bản ghi nhất định

<myLogFilePath> { 
    compress 
    copytruncate 
    delaycompress 
    dateext 
    missingok 
    notifempty 
    daily 
    rotate 30 
} 

Có một "logrotate" kịch bản trong "cron.daily" thư mục (mà dường như được chạy hàng ngày theo bản ghi cron):

#!/bin/sh 

echo "logrotate_test" >>/tmp/logrotate_test 
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error 

EXITVALUE=$? 
if [ $EXITVALUE != 0 ]; then 
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" 
fi 
exit 0 

Câu lệnh echo đầu tiên đang hoạt động.
Nhưng tôi thấy nhật ký ứng dụng của mình không bị xoay vòng, trong khi các nhật ký khác như httpd đang được xoay **
** Và tôi cũng không thấy bất kỳ đầu ra nào trong tệp "logrotate_error" được đề cập
(có quyền ghi Cho tất cả người dùng).

Tuy nhiên, syslog nói: "logrotate: ALERT thoát bất thường với [1]"

Nhưng khi tôi chạy cùng "logrotate" trong "cron.daily" kịch bản bằng tay, mọi thứ dường như làm việc tốt.

Tại sao nó không quay trong lịch biểu cron hàng ngày? Tôi có làm gì sai ở đây không?
Sẽ rất tuyệt nếu tôi nhận được sự trợ giúp cần thiết này.

CẬP NHẬT: Dường như, đó là vì selinux - các tập tin log trong thư mục chính người sử dụng tôi đã hạn chế áp đặt bởi selinux và khi logrotate kịch bản được điều hành:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log 

Trả lời

10

SELinux được hạn chế truy cập vào logrotate trên các tệp nhật ký trong các thư mục không có kiểu bối cảnh tệp SELinux bắt buộc. Thư mục "/ var/log" có ngữ cảnh tệp "var_log_t" và đăng nhập có thể thực hiện được những điều cần thiết. Vì vậy, giải pháp là đặt tệp này trên tệp nhật ký ứng dụng của tôi và đó là thư mục chính:

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
5

Tôi cũng gặp vấn đề tương tự. Để giải quyết này, trước hết tôi đã kiểm tra tình trạng của SELinux bằng cách sử dụng lệnh sestatus:

# sestatus 
SELinux status:     enabled 
SELinuxfs mount:    /selinux 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy version:     24 
Policy from config file:  targeted 

Sau đó, đánh dấu vào bối cảnh SELinux an ninh áp dụng cho các tập tin và thư mục sử dụng ls --scontext. Kiểm tra các tệp bạn muốn đăng nhập để hoạt động và kiểm tra các tệp đang hoạt động, chẳng hạn như/var/log/maillog:

# ls --scontext /var/log/maillog* 
system_u:object_r:var_log_t:s0 /var/log/maillog 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140713 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140720 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140727 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140803 

Sử dụng ngữ cảnh để thay đổi ngữ cảnh tệp.

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
2

Chỉ cần để khái quát nêu trên và đảm bảo cùng một bối cảnh SELinux được thiết lập đúng cho tất cả các file trong tương lai:

semanage fcontext -a -t var_log_t "<directory>(/.*)?" 
restorecon -v <directory> 
0

Tôi đã thấy vấn đề này với SELinux tàn tật và điều này là bởi vì các thư mục cha của log tập tin được luân chuyển có toàn cầu ghi-phép mà không được hoan nghênh bởi logrotate

error: skipping "/xxx/yyy/log/logfile.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. 

chmod thư mục cha đến 755 giải quyết vấn đề này

01.
# logrotate --version 
logrotate 3.8.6 
0

SELinux đang ngăn/usr/sbin/logrotate truy cập đọc trên các trang thư mục.

***** Plugin bắt (100 độ tin cậy) đề xuất ***************************

Nếu bạn tin rằng logrotate nên được cho phép đọc truy cập vào thư mục các trang web theo mặc định. Sau đó, bạn nên báo cáo lỗi này. Bạn có thể tạo mô-đun chính sách cục bộ để cho phép truy cập này.
Đừng
cho phép truy cập này cho bây giờ bằng cách thực hiện:

# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol 
# semodule -i mypol.pp 
+1

đâu này lấy từ đâu? Bạn có thể vui lòng thêm nó? Tôi đã google và tôi thấy rất nhiều thông điệp tương tự như vậy, nhưng tôi không thể tìm thấy nguồn. Đây có phải là tin nhắn mặc định mà SELinux đưa ra không? –

Các vấn đề liên quan