Linux shell flock详解,Linux 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'

参考:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值