与cron一起使用鸡群

我需要防止脚本被同时执行多次,所以我的街道上看起来像flock

我不明白的是,如果我需要手动删除locking文件完成后的cron工作?

我正在使用它:

 # mh dom mon dow user command */20 * * * * root /usr/bin/flock -w 0 /var/cron.lock /usr/bin/myscript 

这个脚本也是在机器启动时由暴发户(这是竞争条件)。

该文件创build好,但我真的不知道如何知道该命令是否被另一个进程持有的锁。 它是空的,并在cron作业启动时监视它的变化什么都不产生(使用fuser )。

如果有人能解释它是如何工作的,我会非常感激!

您指定的locking文件作为/usr/bin/flock的选项; 在脚本/usr/bin/myscript的持续时间内, /usr/bin/myscript /var/cron.lock保持与flock(2)系统调用的locking状态。 脚本完成后,该锁再次由/usr/bin/flock释放。

/usr/bin/flock命令无法实现locking时,即由于/var/cron.lock已被locking,因为脚本仍在运行(或其他任何错误条件),/ usr / bin / flock won'执行你的脚本。 您的脚本不需要修改,也不需要对锁进行任何检查,全部由/ usr / bin / flock完成。

如果锁文件本身不存在,它将被创build为一个空文件,但是在创build之后锁文件不会更改,只会应用一个flock(2)并删除。 脚本完成后,该文件将不会被删除。

有没有理由不能做这样的事情:

 # mh dom mon dow user command */20 * * * * root (/usr/bin/pgrep myscript || /usr/bin/myscript) 

如果在当前进程快照表中找不到进程,则返回1并执行/usr/bin/myscript

如果可以在当前进程快照表中find进程,则返回0并停止执行。