flock shell script 使用速记

背景

在进行后台开发的时候,由于项目本身由多位同事维护,而布设的测试服务器仅一台, 便经常出现脚本执行的多线程(多人) 问题。
比如我们有一个rebuild脚本, 负责重新编译整个项目, 有的时候同时我更新了代码,便登陆测试服务器更新编译,殊不知另一个同事也在编译, 于是两个人都编译不好了, 而且如果不在意的话, 根本不知道是怎么回事。

为了解决这个问题, 我让这个rebuild脚本在执行编译前先尝试锁住一个文件,然后再编译,这样当我试图在别的同事编译的时候编译的话就会失败,我自己也会被告知原因,也不影响其他同事。

脚本


#!/bin/bash

touch tmp_lock_file
{

         flock -n 11
         if [ "$?" -eq "1" ]; then
                   echo "There are others using this script"; 
                   exit;
         fi

    # build project below
    # ...
} 11<"tmp_lockfile"
`

flock 命令

一下为对 man linux的翻译 。

名字

flock - 在 shell 脚本中管理文件锁

语法

#锁特定文件或者文件夹, 如果权限合适的话,在lockfile不存在的时候会创建之。
flock [-sxon] [-w timeout] lockfile [-c] command... 
flock [-sxon] [-w timeout] lockdir [-c] command... 
#锁特定文件描述符。
flock [-sxun] [-w timeout] fd 

描述

这个命令提供通过shell脚本或者其他命令行执行 flock 锁 函数的功能。

使用文件描述符的常用格式 :

(
 flock -s 200

# ... commands executed under lock ...

) 200>/var/lock/mylockfile # 使用 > 的好处是文件不存在的时候会主动创建。

默认设置是flock阻塞直至获取锁。 当然我们可以通过 -n 参数使之立刻返回。

选项

-s, –shared

获得一个共享锁, 可以认为是一个读锁。

-x, -e, –exclusive

获得一个独占锁, 也就是写锁, 默认是这种类型。
-u, –unlock

丢弃一个锁。通常,由于锁会在文件描述符释放的时候自动丢弃,所以不需要这个选项。 某些特殊情况可能需要这个,比如enclosed命令组会创建一个后天进程但是这个进程并不持有锁。

-n, –nb, –nonblock

非阻塞( 失败的话不是等待而是立刻返回1)。

-w, –wait, –timeout seconds

超时等待,如果不能在规定的秒数内获得锁的话,就返回 1 .参数应该是整数。

-o, –close

在执行名列前关闭这个锁锁住的文件描述符。如果这个命令要产生一个不持有这个锁的子进程的话这个参数就好使了。

-c, –command command

执行一个命令

-h, –help

打印

作者

Written by H. Peter Anvin hpa@zytor.com.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值