|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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...
欢迎大家来到仓酷云论坛! |
|