我有一个执行备份的shell脚本。我在cron中设置了这个脚本,但问题是备份很重,所以可以在第一个rsync开始之前执行第二个rsync。 我想在脚本中启动rsync然后获取PID并编写一个脚本检查进程是否存在的文件(如果该文件存在与否)。 如果我把rsync放在后台我得到PID,但我不知道如何知道rsync什么时候结束但是,如果我设置rsync(没有后台)我在进程结束之前无法获得PID所以我可以& #39; t写一个文件白衣PID。
我不知道什么是最好的方式来实现rsync控制"并知道它什么时候结束。
我的脚本
#!/bin/bash
pidfile="/home/${USER}/.rsync_repository"
if [ -f $pidfile ];
then
echo "PID file exists " $(date +"%Y-%m-%d %H:%M:%S")
else
rsync -zrt --delete-before /repository/ /mnt/backup/repositorio/ < /dev/null &
echo $$ > $pidfile
# If I uncomment this 'rm' and rsync is running in background, the file is deleted so I can't "control" when rsync finish
# rm $pidfile
fi
任何人都可以帮助我吗?!
提前致谢!! :)
答案 0 :(得分:1)
测试pid文件的存在和正在运行的进程的状态,如下所示:
#!/bin/bash
pidfile="/home/${USER}/.rsync_repository"
is_running =0
if [ -f $pidfile ];
then
echo "PID file exists " $(date +"%Y-%m-%d %H:%M:%S")
previous_pid=`cat $pidfile`
is_running=`ps -ef | grep $previous_pid | wc -l`
fi
if [ $is_running -gt 0 ];
then
echo "Previous process didn't quit yet"
else
rsync -zrt --delete-before /repository/ /mnt/backup/repositorio/ < /dev/null &
echo $$ > $pidfile
fi
希望这有帮助!!!
答案 1 :(得分:1)
# check to make sure script isn't still running
# if it's still running then exit this script
sScriptName="$(basename $0)"
if [ $(pidof -x ${sScriptName}| wc -w) -gt 2 ]; then
exit
fi
请告诉我这是否适合您。