まだ作成されていないファイルの削除を防止

まだ作成されていないファイルの削除を防止

YARN問題を解決しようとしています。ジョブがYARNに送信されると、必要なすべての設定とスクリプトを含む新しいディレクトリが作成されます。これを完了すると、ディレクトリが削除されます。

0〜2秒後に操作が失敗するため、ファイルが削除されすぎて保存できません。また、ジョブを実行する前にファイルの正確な名前がわかりませんが(自動インクリメントカウンターがある)、親ディレクトリがわかっているので、正確なパスを推測してください。

どういうわけかこのファイル(ディレクトリ全体)を保護またはコピーしたいと思います。毎秒実行するようにcronを設定して親ディレクトリをコピーできるようです(ファイルサイズが容量を超えないかどうかはわかりませんcp)。ディレクトリ内のすべてのファイルを読み取り専用モード(1秒あたり)に変更することもできます(ただし、これはYARNプロセスを妨げ、新しい問題を引き起こす可能性があります)。ディレクトリの権限を変更できません。 YARNは最初にディレクトリを作成できません。

より良い解決策はありますか? (YARNの詳細は重要ではありませんが、誰かが私が知らないいくつかのYARN機能を使用する方法を知っている可能性があります。)

答え1

あなたのアイデアのいくつかは動作しません。

  • Cron は分間隔でのみ実行されます。
  • ファイルを読み取り専用に設定しても削除は防止されません。
  • ディレクトリを読み取り専用に設定すると削除は防止されますが、作成も許可されます。
  • 一方、ファイルサイズはcp容量を超えません。

最善の解決策は、一時ファイルの削除を無効にする方法を見つけることです。

それでも問題が解決しない場合は、最善の方法はファイルをコピーするのではなく、ファイルをリンクすることです。ファイルが作成されるディレクトリがわかっている場合は、2番目のシェルでそのディレクトリを使用してください。

while true; do
    ln sourcedir/* targetdir &> /dev/null
done

完了したら、このタスクを終了する必要があります。同じファイルシステムになければなりませんsourcedirtargetdirこれにより、各ファイルへのハードリンクが作成されます。再実行するとターゲットが存在するため、エラーメッセージが表示され、/dev/nullソース内のファイルがすぐに削除されない限り、すべてのファイルをターゲットディレクトリに配置する必要があります。

編集する

限られた数のネストされたディレクトリの場合は、次を使用してください。

ln sourcedir/* sourcedir/*/* sourcedir/*/*/* targetdir &> /dev/null

すべてのネストレベルに find を使用します。

find sourcedir -type f -exec ln --target-directory targetdir {} +

関連情報