曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7442|回复: 0
打印 上一主题 下一主题

lockfile -- 创建信号量文件(文件锁)

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-6-8 15:46:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
lockfile 可以创建一个锁定文件,它就像一个互斥型信号量,当拥有这个信号量时便可以执行一个程序或脚本,反之需要等待先前的进程释放信号量。所以,信号量文件,又称锁定文件,是一种标记文件,如果特定的文件,设备,或者资源正在被一个特定的进程所使用,那么对于其它进程来说,可能需要等待,或者是智能进行有限的存取操作。

lockfile 的使用语法如下:
lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -!  | -ml | -mu | filename ...

下面使用一个简单的脚本来描述该命令的用法,脚本代码如下:
[Bash shell] 纯文本查看 复制代码
#!/bin/bash

if ! lockfile -r 0 ${0}.lock; then
    echo "${0}.sh is running"
    exit 1
fi

echo "hello lockfile, i will exit after 20s"
sleep 20

rm -f ${0}.lock

代码中,
${0} 表示该脚本的名称。

if 语句表示,如果创建锁文件失败,那么就退出;也就是说,如果已经有锁存在,那么就会创建失败,而已经有锁存在,那就说明已经有别的进程在运行这个脚本。如果成功创建锁文件,那么在 echo 后睡眠 20 秒,醒来后要记得将锁文件删除,这样别人进来时才能运行你这个脚本。

-r 0 表示一次都进行尝试就退出了。

现在运行上面的代码,然后在 20 秒内在另一终端里再尝试运行这个脚本,会看到提示:
beyes@debian:~/command/lockfile$$ sh myscritp.sh
lockfile: Sorry, giving up on "myscritp.sh.lock"
myscritp.sh.sh is running

lockfile 的几个选项:

-sleeptime :该选项表示如果无法获取信号量(获得信号量就相当于可以创建 lock 文件)则睡眠多长时间(默认 8 秒),它和 -r 选项配合使用。
-r :该选项表示尝试的次数,它和 -sleeptime 配合使用。比如指定 sleeptime 为 5,而 -r 后跟 3 ,则表示如果未能获取信号量,会睡眠 5 秒,醒来后继续尝试获取信号量,一共着么搞 3 次,也就是 15 秒,如果还未能获取到信号量,那么就退出了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 07:29 , Processed in 0.080991 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表