[先に後日談]
この記事を公開したところ、
Facebookにて「logrotate使いましょう」とのご指摘を頂いたので、
別途記事を書きました。
併せてお読みください。
—–
仕事(というか仕事の空き時間)で書いたスクリプトの共有です。
多分汎用的に使えるんじゃないかな。
作った経緯としては、今保守対応をしているお客さんのところで、
毎日バッチ処理が走るのだけれども、
その時の実行結果ログがログローテーションされておらず、
かつ、一回の処理で吐き出されるログの量が尋常じゃないので、
放っておくとログファイルだけでギガ単位の容量を喰うという現状から。
(なんでそんなことになっちゃってるのかは、経緯が複雑なので割愛)
今回は、別ロジックで特定のファイル名のファイルに対してログが吐かれる前提。
#!/bin/bash
logterm=8
logfilename="test.log"
newlogfilename=`date '+%Y%m%d' -d "1 days ago"`
dellogfilename=`date '+%Y%m%d' -d "$logterm days ago"`
cp $logfilename ${newlogfilename}.log
echo "" > $logfilename
if [ -e ${dellogfilename}.log ]; then
rm -rf ${dellogfilename}.log
fi
事前に、ログファイル名とログファイルを消すタイミング(=n)を変数として指定しておく。
バッチ実行のタイミングで、システム日付のファイル名で、ログファイルのコピーを取得。
その後、コピー元のログファイルは空にする。
最後に、システム日付から数えてn日前のログファイルを削除する。という流れ。
シェル自体はcronで毎日定時に1回叩く運用を想定。
多分 これで、よほど古い年月日のファイルが残ってなければいけると思います。
フォルダ内のファイルを全部参照して、ファイル作成日を参照して、
一定期間を超えているファイルについては削除。という組み方も考えられたなぁ。
と、記事を書きながら思ったり。まぁ、どっちがスマートなんでしょうね。
* * *
[再度、後日談]
この記事を公開したところ、
Facebookにて「logrotate使いましょう」とのご指摘を頂いたので、
別途記事を書きました。
併せてお読みください。