
在很多人用crontab执行rsync脚本同步时会出现一个进程没有跑完就会起另外一个进程等于是脚本重复在跑这样会造成服务器的负载过高导致服务器上的一些服务异常为了避免这类异常的发生我们仅需要在rsync的脚本里加一个进程锁脚本在执行rsync同步之前会检测进程锁是否存在如果存在则不再执行同一个rsync同步命令。未加进程锁的脚本[rootlocalhost opt]# cat lra.sh #!/bin/sh rsync -avzP --bwlimit 3000 /home/lra abc172.16.0.123::abc --password-file/etc/rsync.pas复制代码Crontab 里的计划任务*/2 * * * * /opt/lra.sh /dev/null复制代码以上说明每两分钟执行一次lra.sh脚本如果lra.sh的同步未在2分钟之内完成crontab接下来的还会执行此脚本这样就会产生相同的rsync的进程。按照这种状态长时间就会产生上百甚至上千个rsync进程就会导致服务器的负载过高甚至一些服务也会出现异常添加进程锁的脚本[rootlocalhost opt]# cat lra.sh #!/bin/sh flock -xn /var/run/rsync.lock -c rsync -avzP --bwlimit 3000 /home/lra abc172.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中模拟加进程锁没有这种方式简单。