记录我工作学习生活中的点点滴滴......

Rsync添加进程锁,防止重复进程
发布于 Linux
2014-04-21 14:01:08
6234
216
在很多人用crontab执行rsync脚本同步时会出现一个进程没有跑完,就会起另外一个进程,等于是脚本重复在跑,这样会造成服务器的负载过高,导致服务器上的一些服务异常
为了避免这类异常的发生我们仅需要在rsync的脚本里加一个进程锁,脚本在执行rsync同步之前会检测进程锁是否存在,如果存在则不再执行同一个rsync同步命令。
未加进程锁的脚本:
[root@localhost opt]# cat lra.sh 
#!/bin/sh
rsync -avzP --bwlimit 3000 /home/lra abc@172.16.0.123::abc --password-file=/etc/rsync.pas
Crontab 里的计划任务
2 * * * * /opt/lra.sh > /dev/null

以上说明每两分钟执行一次lra.sh脚本,如果lra.sh的同步未在2分钟之内完成,crontab接下来的还会执行此脚本,这样就会产生相同的rsync的进程。
按照这种状态,长时间就会产生上百甚至上千个rsync进程,就会导致服务器的负载过高,甚至一些服务也会出现异常!

添加进程锁的脚本:
[root@localhost opt]# cat lra.sh 
#!/bin/sh
 flock -xn /var/run/rsync.lock -c  'rsync -avzP --bwlimit 3000 /home/lra abc@172.16.0.123::abc --password-file=/etc/rsync.pas'
Crontab 里的计划任务
2 * * * * /opt/lra.sh > /dev/null
执行rsync同步命令前添加rsync的进程锁,会在 /var/run/目录下产生一个rsync.lock的锁文件,crontab执行lra.sh脚本,rsync会检测rsync.lock的锁文件是否存在,如果存在说明之前的同步还未完成,则不执行本次的rsync同步,直到上次rsync同步完成后,crontab里的脚本才会执行rsync同步。

很简单有木有?以前都是在php或者python中模拟加进程锁,没有这种方式简单。

分享本文到:
除非特殊注明,本文版权归原作者所有,欢迎转载!转载请注明版权以及本文地址,谢谢。
转载保留版权:Pakey's BLog >>Linux >>Rsync添加进程锁,防止重复进程
本文地址:http://www.pakey.net/blog/rsync-lock.html