当前位置:   article > 正文

Linux shell flock详解,linux之flock实现shell锁

shell flock

flock工具可以实现shell脚本或命令行锁,使用方式:

1. flock [-sxon] [-w timeout] lockfile [-c] command...

2.flock [-sxon] [-w timeout] lockdir [-c] command...

3.flock [-sxun] [-w timeout] fd

前2种方式主要用在命令行中,通过创建文件或文件夹来实现锁机制

第3种方式用在shell脚本中,使用如下:

(

flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile

用> or >>,如果文件不存在,可以创建,但必须有写权限,如果用

默认情况,如果锁不能立即获得,flock等待直到锁可用。

使用参数如下:

[root@slave-b ~]# flock

flock (util-linux-ng 2.17.2)

Usage: flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command...

flock [-sxon][-w #] directory [-c] command...

-s  --shared     Get a shared lock

-x  --exclusive  Get an exclusive lock

-u  --unlock     Remove a lock

-n  --nonblock   Fail rather than wait

-w  --timeout    Wait for a limited amount of time

-o  --close      Close file descriptor before running command

-c  --command    Run a single command string through the shell

-h  --help       Display this text

-V  --version    Display version

介绍一下参数:

-s为共享锁,在定向为某文件的FD上设置共享锁而未释放锁的时间内,其他进程试图在定向为此文件的FD上设置独占锁的请求失败,而其他进程试图在定向为此文件的FD上设置共享锁的请求会成功。

-e为独占或排他锁,在定向为某文件的FD上设置独占锁而未释放锁的时间内,其他进程试图在定向为此文件的FD上设置共享锁或独占锁都会失败。只要未设置-s参数,此参数默认被设置。

-u手动解锁,一般情况不必须,当FD关闭时,系统会自动解锁,此参数用于脚本命令一部分需要异步执行,一部分可以同步执行的情况。

-n为非阻塞模式,当试图设置锁失败,采用非阻塞模式,直接返回1,并继续执行下面语句。

-w设置阻塞超时,当超过设置的秒数,就跳出阻塞,返回值设置为1,并继续执行下面语句。

-o必须是使用第一种格式时才可用,表示当执行command前关闭设置锁的FD,以使command的子进程不保持锁。

-c执行其后的comand。

实例:

#!/bin/bash

{

flock -n 3

[ $? -eq 1 ] && { echo fail; exit; }

echo $$

} 3<>mylockfile

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

闽ICP备14008679号