2012-03-04 29 views
25

Tôi cần đặt logrotate để xoay các tệp nhật ký từ một ứng dụng đang chạy trên máy chủ. Tôi cần ngày bên trong tên tệp.Cách chèn ngày tháng vào tên tệp với logrotate

Tôi đặt ngày tháng và cũng có thể định dạng ngày để thêm - trong ngày. Tên tệp kết quả là: whatever.csv_2012-03-03

Tôi muốn dấu thời gian là một phần của tên tệp giữ an toàn cho phần mở rộng; Whatever_2012-03-03.csv.

Trả lời

20

Để chèn ngày trong tên tập tin (chứ không phải là phần mở rộng) của một tập tin trong Linux trong khi quay một tập tin đó là chính xác để sử dụng:

# Daily rotation 
    daily 

# We keep original file live 
    copytruncate 

# Rotation is 1 so we have always .1 as extension 
    rotate 1 

# If file is missing keep working 
    missingok 

    sharedscripts 
    postrotate 
      day=$(date +%Y-%m-%d) 
      mv blabla.csv.1 /var/www/gamelogs/dir/blabla$day.csv 
    endscript 
} 

này đơn giản và hoạt động tốt.

+0

Tôi thích giải pháp này. Nếu tôi nhận được nó đúng, nó có một tác dụng phụ: logrotate sẽ không còn giới hạn số lượng các tập tin lưu giữ. Nếu dự định, đó là tốt. – Marian

+0

Thật dễ dàng để thêm câu lệnh 'find $ logdir -mtime + $ maxage -delete' vào tập lệnh postrotate của bạn. – Rob

+1

@Rob, vậy, điểm thực sự của việc sử dụng logrotate là gì? – cnst

56

Bạn sẽ có thể tách biệt tiện ích mở rộng, ví dụ: whatever.2012-03-03.csv, với cấu hình như sau:

whatever.csv { 
    dateext 
    dateformat .%Y-%m-%d 
    extension .csv 
    ... 
} 

Lưu ý dateext là cố tình trống rỗng.

+0

Tôi đã thử điều này, nhưng ngày được thêm vào mỗi lần quay, vì vậy tôi nhận được 'file.log',' file.2014-01-08.log' và 'file.2014-01-07.2014-01-08. log' vv – fadedbee

+1

Tôi thấy rằng 'phần mở rộng' phải có' .' để biểu mẫu chính xác là 'phần mở rộng .csv'. Điều này cũng được theo sau trong 'compressext' như trong' compressext .bz2' – ADTC

+3

Ngoài ra, nó phải là 'dateformat.% Y-% m-% d' (dấu chấm đầu tiên là ngày tháng, dấu chấm thứ hai cho phần mở rộng). @chrisdew có lẽ là vì bạn đang sử dụng một ký tự đại diện, vì vậy * logrotate * đang cố gắng xoay cả hai 'file.log' và' file.2014-01-07.log'. Sử dụng tên cố định hoặc sử dụng tùy chọn 'olddir' để di chuyển các tệp đã xoay sang một thư mục khác để chúng không được chọn bằng ký tự đại diện. – ADTC

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