[Linux 常用技巧] 使用进程锁来控制linux中的crontab执行的并发

Feb 25th, 2009

转载本站文章请注明,转载自:扶凯[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同时并发处理一个东西了

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
  1. d0ngd0ng
    Feb 25th, 2009 at 09:42
    Reply | Quote | #1

    这个办法真好,谢谢。
    另请教个问题,如果flock,如果rsync同步还是较慢,那会不会形成一个进程队列?

  2. laneovcc
    Feb 25th, 2009 at 17:16
    Reply | Quote | #2

    这个很有意思~

  3. admin
    Feb 26th, 2009 at 00:00
    Reply | Quote | #3

    呵呵,可以看看我另外那个文章,使用并发的rsync对同一个目录操作.我用并发给目录分来来操作的.

  4. yanming
    Apr 3rd, 2009 at 17:18
    Reply | Quote | #4

    这个程序哪里有下载。

  5. admin
    Apr 4th, 2009 at 22:08
    Reply | Quote | #5

    不用下载,安装完系统直接就有

  6. rockysays
    May 25th, 2009 at 14:45
    Reply | Quote | #6

    可以在代码里加入这一句,保证一个rsync进程运行就是了。。
    pidNum=`ps -ef |grep ‘rsync -参数’|grep -v grep |awk ‘{print $2}’|wc -l`
    if [ $pidNum -gt 0 ]; then
    exit