10分ごとにログファイルがあるフォルダがあります。
alfred_140810-190001.json
alfred_140810-191001.json
alfred_140810-192002.json
alfred_140810-193001.json
alfred_140810-194001.json
alfred_140810-195001.json
alfred_140810-200002.json
alfred_140810-201119.json
alfred_140810-202002.json
...
どうやってこれを達成できますか?
- 1週間を過ぎたすべてのファイルを削除しますが、週に1つずつ保存してください。
- 月が経過したすべてのファイルを削除しますが、月に1つずつ保存します。
- 1年以上経過したすべてのファイルを削除しますが、毎年1つずつ保存してください。
rsnapshot
そのため、過去4週間のファイル(4つ)、月に1つのファイル(12ファイル)、年間1つのファイル(バックアップソートと同じシステム)が必要です。
答え1
ログを回転させたいhttp://linuxcommand.org/man_pages/logrotate8.html。
すでにシステムにいる可能性があります。設定するだけです。ただし、主な目的は古いログファイルを消去することです。ログファイルを保持するように設定できるかどうかはわかりません。
あなたは何ができますか?
log
、、、log.weekly
およびlog.monthly
複数のディレクトリを作成します。log.yearly
log
すべてのログファイルの場所です。作る
log
から最新のログファイルをコピーする毎週のクローンの操作log.weekly
、- 最新のログファイルをからにコピーする月間クローン
log
操作log.monthly
log
から最新のログファイルをコピーする年間のクローン操作ですlog.yearly
。
次に、他のディレクトリに合わせてlogrotateを設定します。
#!/bin/bash
NOW=$(date +%
ls -rt1 ${LOG} | while read FILE
do
TVAL=$(stat --printf %W ${LOG}/${FILE})
if [ $(ls -1 ${LOG.WEEKLY} | wc -l) ] -eq 0 ]
then
cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
else
LAST_WEEKLY=$(ls -t1 ${LOG.WEEKLY} | head -n 1 | stat --printf %W)
if [ $((${TVAL}-${LAST_WEEKLY})) -gt $((60*60*24*7)) ]
then
cp ${LOG}/${FILE} ${LOG.WEEKLY}/${FILE}
fi
fi
# repeat the above logic for month and year
rm ${LOG}/${FILE}
done
答え2
[OK]、ログが毎日生成されると仮定すると、次のようになります。
#!/bin/sh
day=$(date +%u)#To get a day of the week
day_num=$(date +%d) #To get the current day
month=$(date +%m) #To get the current month
year=$(date +%Y) #Get current year
date=$(date +%Y%m%d) #Get current date
if [ $day -eq 7 ] #Saving only Sunday log
then
sunday_day=$(date +%Y%m%d) # Saving sunday day
for (( i = 1; i < 7; i++ ))
do
past_day=$(date -d "-$i day" +%Y%m%d)
rm "alfred_"$past_date"_*" #Delete six older files so it deletes up to last monday
done
fi
if [ $day_num -eq 1 ]
then
for (( h = 2; h <= 31; h ++))
do
first_day=$(date +%Y%m%d)
past_month=$(date -d "-1 month" +%Y%m$h)
if [ $past_month -ne $sunday ]
then
rm "alfred_"$past_month"_*" #Delete all last month but keep sundays' backup and the first day of that month
fi
done
fi
1月の最初のログだけが一年中維持されます。