运行 cron 时锁定文件夹

运行 cron 时锁定文件夹

我正在 Ubuntu 桌面系统上设置我的第一个 cron。我很想知道是否有办法在 cron 运行之前锁定文件夹以及如何设置它?我正在关注文章。我只是想确保在将文件移出或移至 cron 文件夹时不会损坏任何文件,因为它位于共享网络上。

答案1

一个简单的脚本,在访问文件之前具有锁定和延迟:

#!/bin/sh
if mkdir /tmp/myscript-running; then 
    cd /mnt/share/whereever
    find . -type f -mmin +1 -print0 | xargs -i -n 1 -0 myscript.sh "{}"
    rmdir /tmp/myscript-running
else
    : # previous instance still running, do nothing
fi

find该选项需要GNU或同等版本-mmin。您可以根据需要通过 cron 运行此命令。替换myscript.sh为您的处理脚本。

主要特点是:

  1. 用于mkdir创建锁定目录以防止实例重叠
  2. 使用findwith-mmin +1将输出限制为超过 1 分钟前修改的文件,这是为了尝试确保新文件被完全复制
  3. 用于xargs一次处理一个文件,"{}"用文件名替换
  4. 使用\0终止的文件名,find | xargs这样麻烦的文件名就不会引起问题

您应该能够修改find参数以满足您的需要。您还可以使用上述逻辑将完成的文件从“ uploading/”目录移动到“ ready/”目录,这可能会简化事情。

Ubuntu 也有 和lockfileshlock它可能很有用,请参阅后者的手册页以获取更多想法。

答案2

这并不理想,但很有效。当将新文件复制到网络上时,您有一个单独的“馈送”目录,可以将新文件复制到该目录中。然后,您的 cron 脚本可以执行 /var/feeder 的 /ls,然后执行该目录中每个文件的 ls,查找任何打开的文件句柄。然后,未使用的文件将移至主共享目录中,打开的文件(假设您正在复制它们或某些此类文件)将留在馈送器中。确保主 /shared 目录除了您的脚本之外不可写,并且您应该没问题。

答案3

相关内容