Linux/操作運用

Linux/操作運用

容量を食っているファイルを調べる

サーバでログやデータで容量が満タンになってしまったときにそのファイルを突き止めるやり方

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
}

これだと対象のファイルに続きカッコでオプションをズラズラ書くことで設定が完了する。

上から順番に

  • 日次で回転
  • 7世代管理
  • エラったら無視
  • 日付をケツに付ける
  • 圧縮する
  • 回転時に圧縮せず1世代圧縮を遅らせる
  • 新規ファイル作成指定とそのファイルパーミッション指定
  • oldディレクトリを作らずログファイルと並列に保存

となる

logrotate自体はデーモンではなくcronで毎日動いているのでこれで設定は終わり。

ログの出力方式に注意

デーモンのように非常に長時間起動しっぱなしのプログラムが書き込むログファイルは、 そのファイルをプログラム側が掴みっぱなしになっていることがある。

logrotateは内部でmvとtouchに該当する動作をやっていて、プログラム側から見るとmvされていてもmv先を追跡しにいくことになる。 なので掴みっぱなしのプログラムのログはcreateオプションで指定して作った新しいログファイルには書き込みに行かずmv先に書き込みに行ってしまい、ローテーションにならないという事態になる。

そこでcreateの代わりに

copytruncate

というオプションを使うとmvではなくcopyしてオリジナルファイルは維持しつつその中身を削除するという挙動になる。 これでファイルの連続性は保ちつつローテーションが可能になる。

注意としてコピーや中身の削除をやっている少しの間のログを漏らしてしまうという欠点もある・・・

参考サイト

バージョン

  • 2012-04-06 logrotateにcopytruncateのオプションのことを追記

タグ

linux/ope/start.txt · 最終更新: 2018-11-30 11:42 by ore