ソフトウェアエンジニア現役続行

雑多なことを綴ります

プロセスを再起動せずにログを削除するにはtruncate

Linuxサーバーで、sambaが大量のログを出力してパーティションがフルになってしまうトラブルが発生しました。
/var/log/samba/ディレクトリのログファイルを削除しても、改善されずにパーティションはフルのまま。これは、削除したファイルのファイルディスクリプタをsambaプロセスがopenしたままだからでした。samba プロセスを再起動すれば良いのですが、sambaを利用しているクライアントのセッションが切れてしまいます。

こういうとき、ファイルを削除するのではなく、ファイルをtruncateすれば、うまくいきます。例えば以下のようにします。


# echo -n > /var/log/log.oswald

logrotateでも、copytruncateを使うと、同じようにプロセスを再起動せずにログをローテートすることができます。ログファイルをコピーしてから、元のファイルを切り詰めます。


# cat /etc/logrotate.d/openvpn
/var/log/openvpn.log {
size 1M
rotate 4
copytruncate
missingok
}