menu
書いてる野郎
orebike@gmail.com
サーバでログやデータで容量が満タンになってしまったときにそのファイルを突き止めるやり方
du -h /hoge --max-depth=1
duコマンドは全ファイル対象にすると時間がかかるので1階層ずつ潜っていけば大体当たりをつけることができる。
パーティションごとにディスク容量を表示するdf
というコマンドもあるが、duで出した全合計とdfの値が大きくずれていることがある。
この場合長時間起動しているプロセスが怪しい。
デーモンのような長時間起動しているプロセスが大量のファイルを生成したり保存したりしているならば、 一旦そのプロセスを落として再起動してみよう。 これでduとdfの値が近い値になるはずだ。
※この場合デーモンの等が何かのファイルを開きっぱなしにしてクローズ処理を正しくできていない可能性があるので調べるといい
$ ntpdate -b ntp.nict.jp
これをやると時間が飛ぶので cron などでスケジューリングされているものがうまく動かなくなったりするので注意。
マウント情報を知りたいなら、mountコマンドを引数なしで実行すれば見れる
mount
ディスクだけなら、dfコマンドのほうが見やすい
df
Linuxのログのローテーションでよく使われるのがlogrotateとrotatelogs。logrotateはシステムも使ってるやつで、rotatelogsはApacheに付属してくるツール
今回はlogrotateを使う
使い方は簡単でローテーションさせたい設定を・・・
/etc/logrotate.d/
配下に適当なファイルで作るだけ。
いろいろオプションが指定できるが、どうせ回すだけなんだから↓のような感じでいいだろ
/hoge/piyo/fuga.log { daily rotate 7 missingok dateext compress delaycompress create 666 abc abc noolddir }
これだと対象のファイルに続きカッコでオプションをズラズラ書くことで設定が完了する。
上から順番に
となる
logrotate自体はデーモンではなくcronで毎日動いているのでこれで設定は終わり。
デーモンのように非常に長時間起動しっぱなしのプログラムが書き込むログファイルは、 そのファイルをプログラム側が掴みっぱなしになっていることがある。
logrotateは内部でmvとtouchに該当する動作をやっていて、プログラム側から見るとmvされていてもmv先を追跡しにいくことになる。 なので掴みっぱなしのプログラムのログはcreateオプションで指定して作った新しいログファイルには書き込みに行かずmv先に書き込みに行ってしまい、ローテーションにならないという事態になる。
そこでcreateの代わりに
copytruncate
というオプションを使うとmvではなくcopyしてオリジナルファイルは維持しつつその中身を削除するという挙動になる。 これでファイルの連続性は保ちつつローテーションが可能になる。
注意としてコピーや中身の削除をやっている少しの間のログを漏らしてしまうという欠点もある・・・