OEL 6のbashスクリプトで複数のファイルを並べ替えています。
for f in /share/scripts/stats/*.stat; do (cat "${f}"; echo) >> /share/scripts/stats/finalmail.html; done
スクリプトが手動で実行されると、すべてのファイルが完全に追加されます。ただし、スクリプトがcronで実行されると(5分ごとに)、時には(時間の約10%)、1〜2個のファイルの部分データのみが追加されます。このcat操作を呼び出す前に、各ファイルのサイズを一覧表示しようとしています。最終ファイルサイズがすべてのファイルサイズの合計ではない可能性があります。
答え1
ほとんどの場合、ファイルの書き込み中にスクリプトが実行されることがあります。実行すると、cat
現在存在するデータをコピーします。後でより多くのデータが追加されるかどうかはわかりません。
これを避けるために、ファイルをすばやく生成したい場合は、最良の方法はデータを生成するプログラムを変更することです。最後の名前を直接書き込むのではなく、一時ファイルに書き込み、すべてのデータがある場合は一時ファイルの名前を変更します。
gather_data --origin=somewhere >somewhere.stat.tmp &&
mv somewhere.stat.tmp somewhere.stat
ビルドプロセスを変更できない場合は、次のように閉じるファイルに反応できます。inotify。これらのファイルが作成され削除される方法に応じて、次を使用する方が合理的になる可能性があります。インクロンたとえば、次の incrontab 行を使用できます。
/share/scripts/stats IN_CLOSE_WRITE case $@/$# in *.stat) new_stat_file $@/$# esac
new_stat_file
新しいファイルを含むスクリプトになります。cat *.stat
部分ファイルも入手できるので、このようなものを実行しないでください。ファイル名またはファイルコピーの名前を変更します。
/share/scripts/stats IN_CLOSE_WRITE case $@/$# in *.stat) ln $@/$# /share/scripts/stats/ready/; esac
/share/scripts/stats/ready
次に、代わりにファイルをインポートしてください/share/scripts/stats
。