防止删除尚未创建的文件

防止删除尚未创建的文件

我正在尝试解决我的 YARN 问题。当任务提交到 YARN 时,它会创建包含所有所需设置和脚本的新目录。完成此任务后,目录将被删除。

我的任务在 0-2 秒后失败,因此文件被删除得太快,我无法保存它们。在运行任务之前我也不知道文件的确切名称(有自动增量计数器),但我知道父目录,并且我可以尝试猜测确切的路径。

我想以某种方式保护或复制这个文件(整个目录)。我想我可以设置 cron 每秒运行一次并复制父目录(我不知道文件大小是否不会超出cp容量)。我可能还可以(每秒)将目录中的每个文件更改为只读模式(但它可能会干扰 YARN 进程并产生新问题)。我无法更改目录的权限 - YARN 无法首先创建它们。

有更好的解决方案吗? (YARN 细节并不重要,但也许有人知道如何使用一些我不知道的 YARN 功能)。

答案1

你的一些想法是行不通的。

  • Cron 仅以分钟间隔运行。
  • 将文件设置为只读并不能阻止删除。
  • 将目录设置为只读可以防止删除,但也可以创建。
  • 另一方面,文件的大小不会超出cp其容量。

最好的解决方案是找到一种方法来禁用临时文件的删除。

如果这不起作用,最好的方法不是复制,而是链接文件。如果您知道将在其中创建文件的目录,请在第二个 shell 中使用它:

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

完成后您必须终止此操作。sourcedir并且targetdir必须位于同一文件系统上。这将为每个文件创建一个硬链接。当再次运行时,目标存在,因此会显示错误消息,从而重定向到/dev/null.除非源中的文件很快被删除,否则您应该将所有文件都放在目标目录中。

编辑

对于有限数量的嵌套目录,请使用

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

对于任意级别的嵌套,请使用 find

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

相关内容