3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

シェルスクリプトでログローテートの世代管理を行う。

Last updated at Posted at 2020-07-01

3世代残したい場合は、下記のスクリプトワンライナーでいけます。
(考え方としては、3世代残す→ファイル全部から残したい3世代以外のものを消すと読み替える)

(時間的に古いものから消す場合)
ls -1rt | head -n -3 | xargs rm -rf

(ログの文字列たとえばtestlog20200701等の日付の古いものから消す場合)
ls -1 | head -n -3 | xargs rm -rf


説明(ログの文字列から判断して古いものを消す場合)
1.ダミーのログを配置

touch testlog2020070{1..9}

2.確認

ls -la

-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200701
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200702
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200703
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200704
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200705
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200706
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200707
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200708
-rw-r--r--. 1 root root 0 5月 17 16:40 testlog20200709

3.削除対象の抽出
20200707から20200709を残したい→(testlog20200701から20200706を削除したいと読み替える)

ls -1 | head -n -3

testlog20200701
testlog20200702
testlog20200703
testlog20200704
testlog20200705
testlog20200706

4.抽出したログを削除

ls -1 | head -n -3 | xargs rm -rf

確認

ls -la

testlog20200707
testlog20200708
testlog20200709

目的の3世代を残せました。

※)(時間的に古いものから消す場合)については、ls -1rtにて行うことで実現している。
オプションt 時間順番で並び替える
オプションr 逆に並べ替える


ログのローテートそのものは、Linux標準のlogrotate.dを使用して行い、削除部分のみをシェルスクリプトにて行うことを想定しています。
(logrotate.dの削除スクリプトはx日前という形で処理してあり、削除スクリプトがなんらかの理由で動かなかった場合にログが残ってしまう場合があるため)

3
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?