LoginSignup
1
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-29

初めに

よく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(イチ)'

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2