使用带有 cron 的 flock

Jam*_*mes 7 linux cron

我需要防止脚本同时执行多次,所以flock看起来就在我的街上。

我想不通的是,我是否需要在完成 cron 作业后手动删除锁定文件?

我是这样使用它的:

# m h dom mon dow user  command
*/20 *  *  *  *  root /usr/bin/flock -w 0 /var/cron.lock /usr/bin/myscript
Run Code Online (Sandbox Code Playgroud)

这个脚本也由 upstart 在机器启动时执行(这是竞争条件所在)。

文件创建正常,但我真的看不到命令​​如何知道锁是否被另一个进程持有。它是空的,并且在启动 cron 作业时监视它的更改不会产生任何结果(使用fuser)。

如果有人可以解释它是如何工作的,我将不胜感激!

HBr*_*ijn 12

您指定为选项的锁定文件/usr/bin/flock;在脚本运行期间/var/cron.lock保持flock(2)系统调用锁定/usr/bin/myscript。一旦您的脚本完成,该锁将再次由/usr/bin/flock.

/usr/bin/flock命令无法获得锁定时,即因为/var/cron.lock您的脚本仍在运行(或任何其他错误情况)而已被锁定, /usr/bin/flock 将不会执行您的脚本。你的脚本不需要修改,也不需要对锁做任何检查,这一切都由 /usr/bin/flock 完成。

如果锁文件本身/usr/bin/flock不存在,则该命令将创建为空文件,但在创建后锁文件不会更改,只会应用和删除 flock(2)。脚本完成后不会删除该文件。