LoginSignup
5
4

More than 5 years have passed since last update.

垂れ流しているログのローテートの時に注意すること

Posted at

ちょっと前にハマったのでメモメモ。
ちなみにlogloteコマンド使わない感じの制約有りです。。。

-

1. 経緯

少し前に sysstatコマンド のログを垂れ流し状態にしたままログファイルにリダイレクトしてて、
それを日時単位でローテートしましょうということになった。
いちいち手動でやるのがめんどうだったので、ツール化することに。。。

#!/bin/sh

ADDR="www.google.com"
LOG="/root/ping.log"

ping ${ADDR} > ${LOG}

#!/bin/sh

LOG="/root/ping.log"

if [ -e ${LOG} ]; then
    cp -p ${LOG} ${LOG}_`date +%Y%m%d`
    cat /dev/null > ${LOG}
else
    echo Error!!
fi

ツール②で一瞬ファイルクリアされていると思いきや、
実は肥大化していく一方なんですね…。。。

[root@localhost ~]# 
[root@localhost ~]# date;nohup ./tools01.sh &
2015年 12月 31日 木曜日 15:58:11 JST
[1] 3184
[root@localhost ~]# nohup: ignoring input and appending output to `nohup.out'

[root@localhost ~]# ll
合計 12
-rw-------. 1 root root   0 12月 31 15:58 2015 nohup.out
-rw-r--r--. 1 root root 235 12月 31 15:58 2015 ping.log
-rwxr--r--. 1 root root  78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root 139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# date;ll
2015年 12月 31日 木曜日 15:58:30 JST
合計 12
-rw-------. 1 root root    0 12月 31 15:58 2015 nohup.out
-rw-r--r--. 1 root root 1653 12月 31 15:58 2015 ping.log
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# date;ll;./tools02.sh;ll
2015年 12月 31日 木曜日 15:58:39 JST
合計 12
-rw-------. 1 root root    0 12月 31 15:58 2015 nohup.out
-rw-r--r--. 1 root root 2365 12月 31 15:58 2015 ping.log
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
合計 12
-rw-------. 1 root root    0 12月 31 15:58 2015 nohup.out
-rw-r--r--. 1 root root    0 12月 31 15:58 2015 ping.log           ★一旦、ファイルサイズ0になった
-rw-r--r--. 1 root root 2365 12月 31 15:58 2015 ping.log_20151231
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# date;ll
2015年 12月 31日 木曜日 15:58:49 JST
合計 16
-rw-------. 1 root root    0 12月 31 15:58 2015 nohup.out
-rw-r--r--. 1 root root 3166 12月 31 15:58 2015 ping.log           ★bkしたファイルサイズ+更新分サイズになった
-rw-r--r--. 1 root root 2365 12月 31 15:58 2015 ping.log_20151231
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 

このやり方だと、ローテートしている意味がまったくない。

2. 改善

今回は pingコマンド の結果をそのままログファイルにリダイレクトしてしまったことが原因で
ログファイルを初期化してもファイルサイズがどんどん肥大化してしまった模様。

ググッてみた感じ、同じ感じの事象にハマった人も多いらしい。。。

この事象の対策としては、 teeコマンド を使うのがいいらしい。
直接ログファイルにリダイレクトするのではなく、一旦標準出力した情報をログファイルに書き出すのがいいらしい。

なのでツール(①の方だけ修正必要)をこんな感じに修正する。

#!/bin/sh

ADDR="www.google.com"
LOG="/root/ping.log"

ping ${ADDR} | tee -a ${LOG} > /dev/null

修正するとさっきみたくログファイルは肥大化しないで済む。

[root@localhost ~]# 
[root@localhost ~]# date;./tools01_new.sh &
2015年 12月 31日 木曜日 16:35:28 JST
[1] 4025
[root@localhost ~]# 
[root@localhost ~]# date;ll
2015年 12月 31日 木曜日 16:35:37 JST
合計 16
-rw-r--r--. 1 root root 852 12月 31 16:35 2015 ping.log
-rwxr--r--. 1 root root  78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root  97 12月 31 16:32 2015 tools01_new.sh
-rwxr--r--. 1 root root 139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# date;ll
2015年 12月 31日 木曜日 16:35:59 JST
合計 16
-rw-r--r--. 1 root root 2543 12月 31 16:35 2015 ping.log
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root   97 12月 31 16:32 2015 tools01_new.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# date;ll;./tools02.sh;ll
2015年 12月 31日 木曜日 16:36:06 JST
合計 16
-rw-r--r--. 1 root root 3166 12月 31 16:36 2015 ping.log
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root   97 12月 31 16:32 2015 tools01_new.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
合計 16
-rw-r--r--. 1 root root    0 12月 31 16:36 2015 ping.log
-rw-r--r--. 1 root root 3166 12月 31 16:36 2015 ping.log_20151231
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root   97 12月 31 16:32 2015 tools01_new.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# date;ll
2015年 12月 31日 木曜日 16:36:11 JST
合計 20
-rw-r--r--. 1 root root  534 12月 31 16:36 2015 ping.log
-rw-r--r--. 1 root root 3166 12月 31 16:36 2015 ping.log_20151231
-rwxr--r--. 1 root root   78 12月 31 15:43 2015 tools01.sh
-rwxr--r--. 1 root root   97 12月 31 16:32 2015 tools01_new.sh
-rwxr--r--. 1 root root  139 12月 31 15:54 2015 tools02.sh
[root@localhost ~]# 
[root@localhost ~]#
5
4
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
5
4