Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2914

日付ではなくファイル数でログローテーションする

$
0
0

初めに

よく7日前のログファイルを消してローテーションのように日付が条件として使われますが、
今回は個数指定でローテーションする場合のbashサンプルを作ってみました。

ローテーション対象ファイル

今回ローテーションするファイルは
server.log.YYYY-MM-DDの形式でローテーションすることとします。

 /var/log/server.log # 最新のファイル
 /var/log/server.log.2020-03-25
 /var/log/server.log.2020-03-24
 /var/log/server.log.2020-03-23
 /var/log/server.log.2020-03-22

実装

#!/bin/bash

ROTATE_GEN=7             # ローテーション世代(今回は7個残す)
LOG=/var/log/server.log  # 対象ファイル

# 日付付きでファイルを退避
mv ${LOG} ${LOG}.`date +"%Y-%m-%d"` 

# 現在のファイル数(FILE_CNT) - 世代数(ROTATE_GEN)
# = 削除するファイル数(RM_CNT)
FILE_CNT=`ls -1t ${LOG}.* | wc -l`
RM_CNT=`expr ${FILE_CNT} - ${ROTATE_GEN}`

# RM_CNTの数だけファイルを削除
if [[ $RM_CNT -gt 0 ]] ; then
 ls -1t ${LOG}.* | tail -n ${RM_CNT} | xargs rm -f
fi

補足

 * lsのオプションは'l(エル)'ではなく'1(イチ)'


Viewing all articles
Browse latest Browse all 2914

Trending Articles