それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ファイルを空っぽにするコマンド truncate

ファイルを空っぽにしたい

exim4 にパニックログが残ってると、エラー監視ログが上がってくるんですね。ログファイルを空にしたい。

exim paniclog /var/log/exim4/paniclog on acid has non-zero size, mail system might be broken. The last 10 lines are quoted below.

2019-11-21 22:53:06 socket bind() to port 25 for address 172.17.0.1 failed: Cannot assign requested address: daemon abandoned

truncate ファイルを空にするコマンド

truncate でファイルを空にする事ができます。

truncate -s 0 /var/log/file

空にする必要があるの?

あります。

ファイルの監視の問題とopenしている場合

削除であれば、ファイルをWatchしている各種サーバー類やファイルの移動をすると面倒くさいことがある。open していると取り合いにある。truncate は成功する可能性がある。

パーミッションの問題。

なにより rm して touch すると umask の設定によってはオーナやパーミッションが変わってしまうことがあります。面倒くさい。

ログファイルの空に

今回の exim4 のログファイルのように、「定期的にファイルを空にする」と解決する場合に活躍します。

ファイルを削除して作成してパーミッションを合わせるより、既存のファイルを空っぽにするほうがずっと楽だ。

truncate を crontab にサクッと書いて終わりです。

そもそもなぜexim4がlogrotate しないのかは謎だけど、調べるのも面倒くさい話です。

実例

takuya@:exim4$ cat  /var/log/exim4/paniclog
2019-11-21 22:53:06 socket bind() to port 25 for address 172.17.0.1 failed: Cannot assign requested address: daemon abandoned


takuya@:exim4$ sudo truncate  -s 0 /var/log/exim4/paniclog

takuya@:exim4$ cat  /var/log/exim4/paniclog

そもそもtruncate コマンドは?

ファイルを指定サイズに切り詰めます。

truncate のその他の使い方。指定サイズのファイルを作る。

一緒に覚えておくと便利です。

指定したサイズより、ファイルが小さいなら、指定サイズになるまで0埋めされる。

ファイルのサイズを指定したら0埋めしたダミーファイルをサクッと作れます。

たとえば1GBのファイルを作るのであれば truncate の 引数に 1GB を指定すれば良いわけです。

takuya@:~$ truncate -s $(( 1024*1024*1024 )) sample

takuya@:~$ ll sample
-rw-rw-r-- 1 takuya takuya 1.0G 2020-01-15 01:06 sample

参考資料

  • man truncate