仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1364|回复: 10
打印 上一主题 下一主题

[shell编程] 来一发shell中完成文件锁

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!1.背景
当多个历程大概会对一样的数据实行操纵时,这些历程必要包管别的历程没有在操纵,以避免破坏数据。一般,如许的历程会利用一个“锁文件”,也就是创建一个文件来告知其余历程本人在运转,假如检测到谁人文件存在则以为有操纵一样数据的历程在事情。如许的成绩是,历程不当心不测出生了,没有清算失落谁人锁文件,那末只能由用户手动来清算了。

2.关于flock
flock是关于全部文件的倡议性锁。也就是说,假如一个历程在一个文件(inode)上放了锁,那末别的历程是能够晓得的。(倡议性锁不强求历程恪守。)最棒的一点是,它的第一个参数是文件形貌符,在此文件形貌符封闭时,锁会主动开释。而当历程停止时,一切的文件形貌符均会被封闭。

3.shell中完成flock体系挪用的下令是flock,其利用格局有以下两种(manflock)
flock[-sxon][-wtimeout]lockfile[-c]command...
flock[-sxun][-wtimeout]fd

选项和参数:
-s,--shared:猎取一个同享锁在定向为某文件的FD上设置同享锁而未开释锁的工夫内,其他历程试图在定向为此文件的FD上设置独有锁的哀求失利,而其他历程试图在定向为此文件的FD上设置同享锁的哀求会乐成。
-x,-e,--exclusive:猎取一个排它锁,大概称为写进锁,为默许项
-u,--unlock:手动开释锁,一样平常情形不用须,当FD封闭时,体系会主动解锁,此参数用于剧本下令一局部必要异步实行,一局部能够同步实行的情形。
-n,--nb,--nonblock:非堵塞形式,当猎取锁失利时,前往1而不是守候
-w,--wait,--timeoutseconds:设置堵塞超时,当凌驾设置的秒数时,加入堵塞形式,前往1,并持续实行前面的语句
-o,--close:暗示当实行command前封闭设置锁的FD,以使command的子历程不坚持锁。
-c,--commandcommand:在shell中实行厥后的语句

4.shell中完成排它锁制止剧本反复实行
Linux中的例行性事情排程crontab会准时实行一些剧本,但剧本的实行工夫常常没法把持,当剧本实行工夫太长时,大概会招致上一次义务的剧本还没实行完,下一次义务的剧本又入手下手实行了。这类情形下大概会呈现一些并提问题,严峻时会招致呈现脏数据/功能瓶颈的恶性轮回。
经由过程利用flock创建排它锁能够躲避这个成绩,假如一个历程对某个加了排他锁,则别的历程没法加锁,能够选择守候超时或即刻前往。测试实比方下:

4.1创立实行剧本
#cat/scripts/shell/file_lock.sh
#!/bin/bash
#Description:testforfileflock
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
exportPATH

echo""
echo"----------------------------------"

echo"startat`date+%Y-%m-%d%H:%M:%S`..."

sleep140s

echo"finishedat`date+%Y-%m-%d%H:%M:%S`..."


4.2创立准时义务:测试排它锁
#crontab-e
*****flock-xn/dev/shm/test.lock-c"sh/scripts/shell/file_lock.sh>/root/stdout.log"
每分钟实行一次该剧本,并将输入信息写进到stdout.log

检察输入日记以下:
----------------------------------
startat2014-04-1010:23:01...#猎取锁

finishat2014-04-1010:25:21...#开释锁


----------------------------------
startat2014-04-1010:26:01...#10:27:00及10:28:00启动的准时义务因为没法猎取锁,以失利而加入实行,直到10:26:00才猎取到锁

finishat2014-04-1010:28:21...

4.3测试排它锁,加上守候超时
*****flock-x-w20/dev/shm/test.lock-c"sh/scripts/shell/file_lock.sh>/root/stdout.log"

检察日记输入信息:
----------------------------------
startat2014-04-1010:29:01...

finishat2014-04-1010:31:21...

----------------------------------
startat2014-04-1010:31:21...#10:31:00启动的准时义务守候了20秒后,上一个义务开释了锁,以是此义务能够即刻拿到锁,并持续实行

finishat2014-04-1010:33:41...
欢迎大家来到仓酷云论坛!
海妖 该用户已被删除
沙发
发表于 2015-1-15 07:52:28 | 只看该作者

来一发shell中完成文件锁

好,很好,非常好!
乐观 该用户已被删除
板凳
发表于 2015-1-15 07:52:28 | 只看该作者

来一发shell中完成文件锁

报告!别开枪,我就是路过来看看的。。。
若天明 该用户已被删除
地板
发表于 2015-1-17 17:47:56 | 只看该作者
虽然大家都比较喜欢漂亮的mm,但是在学linux的过程中,还是要多和“男人”接触一下:P遇到问题的时候,出来看说和上网查之外,就是要多用linux下的man命令找找帮助。
深爱那片海 该用户已被删除
5#
发表于 2015-1-26 21:16:42 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
飘灵儿 该用户已被删除
6#
发表于 2015-2-5 03:04:42 | 只看该作者
其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。
精灵巫婆 该用户已被删除
7#
发表于 2015-2-11 04:01:44 | 只看该作者
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
透明 该用户已被删除
8#
发表于 2015-3-1 21:34:23 | 只看该作者
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
变相怪杰 该用户已被删除
9#
发表于 2015-3-11 02:14:54 | 只看该作者
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
小魔女 该用户已被删除
10#
发表于 2015-3-17 20:51:44 | 只看该作者
一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。?
若相依 该用户已被删除
11#
发表于 2015-3-25 04:29:24 | 只看该作者
要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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