Linux的文件锁flock

作者: 刘小白DOER | 来源:发表于2021-06-15 15:42 被阅读0次

    今天看腾讯云服务器的脚本时,发现在root用户的crontab定时任务里面有个函数flock。在每五分钟执行脚本时在脚本前面加上了“  flock -xn /tmp/stargate.lock -c   ”。

    crontab -l 查看后详细的写法如下:

*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'

    使用man flock查看flock的man手册页。flock即file lock 。

    当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有也在操作,以免损坏数据。进程会使用一个「锁文件」,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。所以shell命令flock通过加锁方式实现互斥访问,常用于多进程间互斥访问。

    flock:manage locks from shell scripts。

     -s, --shared:共享锁,或者称为读锁;

    -u,--unlock:手动释放锁,一般情况不必须,当FD关闭时,系统会自动解锁;

    -w, --wait, --timeout seconds:设置阻塞超时,当超过设置的秒数时,退出阻塞模式,返回1;

    -x,-e,--exclusive:获取一个排它锁,或者称为写锁,为默认项;

    -n,--nb, --nonblock:非阻塞模式,当获取锁失败时,返回1而不是等待;

    -c, --command ,command:在shell中执行其后的语句。

    那么上面的crontab运用flock防止start.sh脚本重复执行  。当下个任务启动时,flock命令检测到文件/tmp/stargate.lock写锁定,会返回1直接失败,不会执行。而原来正在运行的任务,执行完毕后,会自动删除/tmp/stargate.lock文件锁。

    现在做个while.sh脚本来就行测试。

#!/usr/bin/bash

while true

do

        echo `date`,"ok"

        sleep 3s

done

1、flock -xn

    在一个终端内使用flock运行此进程:

flock -xn /tmp/mywhile.lock -c '/usr/bin/bash /home/lighthouse/myshells/while.sh'

    在再开一个终端运行,发现直接退出,退出状态码(exit status)是1 。

2、flock -x

     在一个终端内使用flock运行此进程:

flock -x /tmp/mywhile.lock -c '/usr/bin/bash /home/lighthouse/myshells/while.sh'

      在再开一个终端运行,两个同时运行,后一个发现处于等待状态,而不是退出状态。ctrl + c杀掉第一个进程,第二个就开始运行,可以从时间上看出先后。

3、flock -x -w

    在一个终端内使用flock运行此进程:

flock -x -w 6 /tmp/mywhile.lock -c '/usr/bin/bash /home/lighthouse/myshells/while.sh'

     在再开一个终端运行,两个同时运行,后一个发现处于等待状态,而不是退出状态,过了6秒之后发现退出,退出状态码(exit status)是1 。

相关文章

  • Linux文件锁-flock

    背景:在使用crontab管理定时脚本时,如果设定的脚本执行时间间隔较短,例如5分钟执行一次,正常情况下,脚本执行...

  • Linux的文件锁flock

    今天看腾讯云服务器的脚本时,发现在root用户的crontab定时任务里面有个函数flock。在每五分钟执行脚...

  • linux c文件锁flock

    1.源码实现 2.编译源码 3.运行及其结果

  • 了解cephfs锁必须要知道的事情

    1、本文讨论的锁不是flock。flock是posix标准中对文件某部分偏移加的锁。而这里的锁指的是MDS集中管理...

  • linux使用flock文件锁解决脚本重复执行问题

    关于forck flock 是对于整个文件的建议性锁。也就是说,如果一个进程在一个文件(inode)上放了锁,那么...

  • 12.3.5 文件的锁定机制

    12.3.5 文件的锁定机制 flock -- 轻便的咨询文件锁定语法: bool flock ( int han...

  • 使用文件锁flock实现进程互斥

    最近写了一个python脚本,对Android设备进行自动化测试。当重复执行脚本时,如果不对访问设备进行锁控制,不...

  • flock v.s. fcntl

    共同点 都支持阻塞和非阻塞模式 只能操作于文件,而不是目录 当进程结束或者终止的时候,锁都会被自动释放 flock...

  • Linux 文件锁

    系统调用fcntl 参数:fd:文件描述符cmd:F_GETLK, F_SETLK or F_SETLKWlock...

  • 2018-11-11网络攻防第五周学习文档

    Linux 了解了linux的文件系统一些基本概念,如链接,互斥锁,共享锁等,还有有关文件系统的系统调用,crea...

网友评论

    本文标题:Linux的文件锁flock

    本文链接:https://www.haomeiwen.com/subject/ogjzeltx.html