LOCKFILE(1) | General Commands Manual | LOCKFILE(1) |
lockfile - 条件标志文件创建命令
lockfile -sleeptime | -r retries | -l locktimeout | -s suspend | -! | -ml | -mu | filename ...
lockfile可以用来创建一个或多个 信号量(semaphore) 文件.如果lockfile不能创建所有指定的文件(按照指定的顺序),那么它会等待一段 休眠期(sleeptime) (默认为8秒)并从不成功的最后一个文件开始重试.你可以指定失败返回之前 重试(retries) 的次数. 如果 retries 的次数设为-1(默认地,也即 -r-1) lockfile会永远重试下去.
如果在所有文件创建之前 retries 的次数已经满了,lockfile会返回失败的信息并删除所有已经创建的文件.
在shell脚本中使用lockfile作为循环的条件可以很容易地通过使用 -! 标识反向退出的状态来实现.为了防止无限循环,除了lockfile已经存在以外的任何原因的失败都不会反向为成功状态,而是仍然以失败状态返回.
所有标识可以在命令行中的任何地方指定,碰到它们就进行处理.命令行简单地由左至右进行解析.
所有通过lockfile创建的文件都是只读的,因此必须使用 rm -f 来删除.
如果你指定了一个 locktimeout 那么lockfile会在lockfile最后一次修改/创建之后locktimeout秒过后强制性地删除(很可能是一些其它程序意外死掉很长一段时间后造成不能清除残余的lockfiles).Lockfile不受时钟偏差的影响.在lockfile强制被清除之后,延迟的 suspend 秒(默认为16)开始计数,这是为了防止无意的直接删除了任何由另一程序新创建的lockfile(与 procmail(1)) 中的 SUSPEND 比较).
如果系统邮件spool目录有权限允许它,或者如果lockfile正好被setgid了,那么它可以通过 使用相应的选项 -ml 和 -mu lock和unlock你的系统邮箱.
假设你想确定访问文件"important"是串行的,也即,没有其它程序或shell脚本允许访问它.为了简省起见,让我们假定它是一个shell脚本.在这个例子中,你应该像这样解决:
确实少于一个.
-! 标识的操作行为,尽管有用,但是并不很直接或一致.当测试lockfile的返回值时,shell脚本编写者应该仔细考虑是使用 -! 标识简单地作反向测试,还是对原来的退出代码执行一次转换. 通常, -! 标识应该只用在lockfile是循环的条件之时.
Lockfile不兼容NFS,而且八位还原.
使用-h或-?选项调用lockfile会使得它显示命令行方式的帮助页.使用-v选项调用会使得它显示版本信息.
多个 -! 标识会切换返回状态.
因为标识可以出现在命令行的任何位置,所以任何一个以'-'开头的文件名必须加'./"在前面.
当任何接在后面的文件正在创建(也即,它们正在使用)时, retries 的次数不能重新设置.不过,它可以通过在命令行上指定 -rnewretries 于每个文件之后来重新设置.
尽管任何名字的文件都可用作lockfiles,通常习惯还是使用扩展名为'.lock'的文件来lock邮件文件夹(它添加于邮件夹名之后).如果不想担心文件名太长了,也不必遵从任何其它的lockfilename的习惯,那么一个最好的方法就是通过添加前缀`lock.'来生成一个与已经存在的文件相应的lockfilename,并且在其后添加锁定文件的i-node数.
该程序为 http://www.procmail.org/或者 ftp.procmail.org的 pub/procmail/ 中 procmail mail-processing-package (v3.14)的一部分.
有一个针对procmail包中任何程序相关问题的邮件列表:
如果你想即时获得新版本和公开补丁的通告,请发订阅请求到
Stephen R. van den Berg
riser <boomer@ccidnet.com>
2001/08/08
http://cmpp.linuxforum.net
本页面中文版由中文
man 手册页计划提供。
中文 man
手册页计划:https://github.com/man-pages-zh/manpages-zh