catスクリプト内の複数のファイルは、cronで予約したときにデータを切り捨てます。

catスクリプト内の複数のファイルは、cronで予約したときにデータを切り捨てます。

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

関連情報