[Linux 常用技巧] 使用进程锁来控制linux中的crontab执行的并发
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/02/25/flock.html
我使用crontab同步一个文件夹时,发现一个问题,我在crontab中设置的1分钟运行一次.但当那个文件夹的内容改变时.1分钟不一定能同步完,但这时第二个rsync进行又起来了.
这个就产生一个问题,二个rsync一起处理相同的文件,这样会出问题.如下
1 * * * * /usr/bin/rsync -avlR /data/files 172.16.xxx.xxx:/data
本来想写个脚本来解决,但太麻烦.所以用了个linux下的锁..呵呵,象下面这个.
1 * * * * flock -xn /var/run/rsync.lock -c ‘ rsync -avlR /data/files 172.16.xxx.xxx:/data’
这样,使用flock的-x参数先建一个锁文件,然后-n指定,如果锁存在,就等待.直到建成功锁在会运行-c后面的命令.这样第一个进程没有运行完前,锁文件都会存在.这样就不会二个rsync同时并发处理一个东西了



















这个办法真好,谢谢。
另请教个问题,如果flock,如果rsync同步还是较慢,那会不会形成一个进程队列?
这个很有意思~
呵呵,可以看看我另外那个文章,使用并发的rsync对同一个目录操作.我用并发给目录分来来操作的.
这个程序哪里有下载。
不用下载,安装完系统直接就有
可以在代码里加入这一句,保证一个rsync进程运行就是了。。
pidNum=`ps -ef |grep ‘rsync -参数’|grep -v grep |awk ‘{print $2}’|wc -l`
if [ $pidNum -gt 0 ]; then
exit