ちょっと前にハマったのでメモメモ。
ちなみに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 ~]#