Logging

如何每次輪換將許多日誌文件輪換到不同的子目錄中?

  • February 10, 2019

我有一個包含許多日誌文件的目錄,我想每天輪換所有這些文件。出於組織目的,我希望能夠將旋轉的日誌移動到按日期命名的不同目錄(或子目錄)中,保留最後一周的日誌。

我可以使用 logrotate 通過就地旋轉文件來實現大部分功能,甚至可以使用該olddir指令將它們移動到單個不同的目錄,但我無法找到一個解決方案來為每個旋轉創建單個子目錄。我怎樣才能做到這一點?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
   /var/log/example/20121006/*
   [ ... ]
   /var/log/example/20121012/*

postrotate您應該能夠在指令中呼叫外部腳本:

postrotate
 /path/to/your.sh
endscript

並讓該腳本進行移動,例如:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
 -type d -print0 | xargs -0 rm -rf

dateext但是,僅使用該指令可能更容易。這樣,旋轉的文件將附加一個時間戳(儘管沒有移動到不同的目錄)。

有關這兩個指令的詳細資訊,請參閱logrotate(8)

引用自:https://serverfault.com/questions/437841