在 incron 作业中一次允许一个条目?

在 incron 作业中一次允许一个条目?

我有一个要监视的目录。更新后,我通过 incron 运行一些命令。当该目录下复制多个文件时,incron会同时执行多个命令。有没有什么方法可以让 incron 的一项作业运行时,第二项作业不运行?我已关注本教程以获得指导。

答案1

不,incron 没有内置锁定功能。如果您想阻止作业同时运行,请从作业内部执行此操作。

如果您想延迟作业直到前一个作业完成,请让它们锁定。您可以使用flock命令。手册页中有示例。

如果您想在前一个作业尚未完成的情况下跳过某个作业,您仍然可以使用flock,但超时时间为 0。如果无法获取锁,请退出。请注意,这很容易出现竞争条件:可能会发生在作业 #1 完成枚举文件之后但在它有时间释放锁之前复制新文件的情况,而作业 #2 会发现该锁已被复制。仍然保持并退出而不处理文件。解决这场竞赛没有简单的方法。

答案2

一个最简单的解决方案示例:假设 1 表示文件已锁定(前一个脚本已在运行),0 表示已解锁(没有进程在运行)。

然后这是代码

    state=`cat /tmp/my_lck`
    if [ "$state" -eq 1 ];then
        echo "Already executing!!!"
        exit
    else
        #Lock the file
        echo 1 > /tmp/nws_lck

       #Put you code here  

 #Unlock    
        echo 0 > /tmp/nws_lck

    fi

相关内容