Rsync添加进程锁,防止重复进程

转自: http://pakey.net/blog/rsync-lock.html


在很多人用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中模拟加进程锁, 没有这种方式简单。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值