来一发shell中完成文件锁
如果您觉得本篇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...
欢迎大家来到仓酷云论坛!
来一发shell中完成文件锁
好,很好,非常好!来一发shell中完成文件锁
报告!别开枪,我就是路过来看看的。。。 虽然大家都比较喜欢漂亮的mm,但是在学linux的过程中,还是要多和“男人”接触一下:P遇到问题的时候,出来看说和上网查之外,就是要多用linux下的man命令找找帮助。 一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。? 其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。 对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。 通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。? 为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。 一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。? 要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。
页:
[1]