Raspberry Pi 3 Debian 最新バージョンで次のコマンドを実行します。
cat /dev/ttyUSB0 | tee -a /media/pi/KINGSTON/klima.out | grep -F $ | tee -a /media/pi/KINGSTON/log
コマンドは正常に実行され、期待どおりに実行されます。ただし、ファイルを(手動またはCRON経由で)削除すると、klima.out
再生成されません。コマンドは引き続き実行され、ログファイルは引き続き追加されますが、klima.out
ファイルは返されません。 (バッファリングもありません)。すべての境界を離れないように週に一度削除したいと思います。どんな提案がありますか?
ベストアンサー1
あなたのパイプラインが長い間実行されていて、実行中にログファイルを削除したいとします。
ファイルを削除しても、プロセスは書き込み用にtee
ファイルを開いたままにします。これは、ディスク領域がシステムに再提供されないことを意味します。これは、ファイルを参照するすべての開いているファイル記述子が閉じられるまで発生しません。
削除する前に、ファイル記述子が割り当てられている限り、削除されたファイルに書き込むことができます。
ファイルを再生成し、古い(現在の名前なし)ログファイルが占有していたスペースを回復するには、パイプラインを再起動する必要があります。
パイプラインを再起動したくない場合は、次を選択できます。カットつまり、ファイルを削除せずにサイズを0に切り捨てます。これにより、tee
ファイルを再度開かずにファイルに追加することができます。
ファイルをトリミングすることができます。jlliagreが彼の答えに示すように、または使用truncate
(GNU coreutilsの一部である非標準ユーティリティ):
truncate -s 0 /media/pi/KINGSTON/klima.out
バラより手動truncate
このユーティリティに関する追加情報。