毎日新しいプロセスを開始するクローンタスクがあります。このプロセスは5分ごとに実行され、ログファイルに追加されます。
別のクローンジョブは60分ごとに実行されます。ログファイルからいくつかのデータをインポートしてクリーンアップし、新しいログファイルを作成します。クリーンアップされたログファイルをデータベースにインポートします。 MySQLは重複エントリを防止するため、各新しいクリーンアップログファイルの最初の数行は無視されます。
結局、クリーンアップされたログファイル24個と元のログファイル1個が残りました。
まず、前処理するファイル名を変更してクリーンスクリプトを実行し、必要な操作を実行してから削除すると、最初のクローンスクリプト(5回ごとに同じファイルにロギング)が発生しますか?問題ありますか?
私の興味は、他のcronジョブが名前を変更しようとしている間に元のログファイルが記録されていることです。
オペレーティングシステム:Debian 8
編集:興味深いです。 Cronは名前が変更されたファイルに書き込みます。
答え1
ファイル名の変更や削除を防止するファイルロック機構は不要です。他のプロセスが開いている間にファイルの名前を変更したりファイルを削除したりすることは、そのファイルが積極的にデータを書き込んでいる場合でも有害ではありません。
ファイルを開くプロセスには違いがなく、名前が変更されたファイルの元のデータだけでなく、ファイルが削除されたことを認識せずに「削除された」ファイルにも透過的にアクセスします。実際の削除は、プロセスが終了したときにのみ発生します。