ファイルを空っぽにしたい
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