当前位置:   article > 正文

Linux shell flock详解,Linux shell:Flock简介

shell flock

简介

当多个进程操作同一份资源时,为了避免损坏数据, 每个进程在运行时都要保证其它进程没有同时操作资源, 这时通过flock命令给资源加锁可以实现此需求。flock - 在打开的文件上应用或删除咨询锁

命令flock [options] [command args]

flock [options] -c

flock [options]

options:-s, -share 读锁,共享锁

-x, -e, --exclusive 写锁,独占锁,这是默认值

-u, --unlock 解锁,通常不需要解锁,因为在文件关闭时会自动解锁

-n, --nonblock 无法立刻获取锁定时退出,而不是等待

-w, --timeout 几秒内无法获取锁定则退出

-E, --conflict-exit-code exit code after conflict or timeout

-o, --close close file descriptor before running command

-c, --command 提供一个字符串形式的shell命令来执行

-h, --help display this help and exit

-V, --version output version information and exit

示例[root@localhost ~]# flock -s ~/test.lock -c "sleep 10" &

#加读锁

[1] 1854

[root@localhost ~]# flock -x ~/test.lock -c "echo 1"

#等待10s上面的进程自动释放读锁,并加写锁

1

[1]+ Done flock -s ~/test.lock -c "sleep 10"

[root@localhost ~]# flock -s ~/test.lock -c "sleep 10" &

[1] 1911

[root@localhost ~]# flock -u ~/test.lock -c "echo 1"

#释放锁

1

[root@localhost ~]# flock -s ~/test.lock -c "sleep 10" &

[1] 1935

[root@localhost ~]# flock -xn ~/test.lock -c "echo 1"

#无法获取写锁,立刻退出,不执行命令

[root@localhost ~]#

[root@localhost ~]# flock -s ~/test.lock -c "sleep 10" &

[1] 1942

[root@localhost ~]# flock -x -w 3 ~/test.lock -c "echo 1"

#等待3s,仍然不能获取写锁,退出不执行命令

[root@localhost ~]#

配合cron

通常的需求是,对于一个脚本,希望每分钟执行一次,但是又要保证每次脚本运行的时候其他脚本没有运行,也就是常说的保证单进程运行,这时就可以用到flock命令。

比如:#如果能成功获取test.lock文件独占锁, 则执行test.sh脚本,否则不执行

* * * * * /usr/bin/flock -xn /tmp/test.lock -c './test.sh'

另外因为cron设置时间间隔的最低级别是分钟,我们还可以配合sleep命令,将脚本设置交个提升到秒级别。

比如:#每分钟内间隔10s尝试获取对应文件的独占锁,如果能获取成功,执行test.sh脚本,否则不执行。

#保证每分钟最多有6个进程在同时进行。

* * * * * sleep(10); /usr/bin/flock -xn /tmp/test10.lock -c './test.sh'

* * * * * sleep(20); /usr/bin/flock -xn /tmp/test20.lock -c './test.sh'

* * * * * sleep(30); /usr/bin/flock -xn /tmp/test30.lock -c './test.sh'

* * * * * sleep(40); /usr/bin/flock -xn /tmp/test40.lock -c './test.sh'

* * * * * sleep(50); /usr/bin/flock -xn /tmp/test50.lock -c './test.sh'

* * * * * sleep(60); /usr/bin/flock -xn /tmp/test60.lock -c './test.sh'

参考:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/953188
推荐阅读
相关标签
  

闽ICP备14008679号