来自 shell 脚本的后台 rsync 和 pid
Background rsync and pid from a shell script
我有一个执行备份的 shell 脚本。我在 cron 中设置了这个脚本,但问题是备份很重,因此可以在第一次 rsync 结束之前执行第二次 rsync。
我想在脚本中启动 rsync,然后获取 PID 并编写一个文件,脚本检查进程是否存在(如果该文件存在或不存在)。
如果我将 rsync 置于后台,我会得到 PID,但我不知道如何知道 rsync 何时结束,但是,如果我设置 rsync(无背景),我无法在进程完成之前获得 PID,所以我无法编写文件白衣PID。
我不知道去 "have rsync control" 的最佳方式是什么,也不知道什么时候结束。
我的脚本
#!/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
有人能帮帮我吗?!
提前致谢!! :)
像这样测试 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
希望对您有所帮助!!!
# check to make sure script isn't still running
# if it's still running then exit this script
sScriptName="$(basename [=10=])"
if [ $(pidof -x ${sScriptName}| wc -w) -gt 2 ]; then
exit
fi
- pidof 查找进程的 pid
- -x 告诉它也要查找脚本
- ${sScriptName} 只是脚本的名称...您可以对其进行硬编码
- wc -w returns 字数
- -gt 2 不超过1个实例运行(实例加1用于pidof检查)
- 如果不止一个实例运行然后退出脚本
让我知道这是否适合你。
我有一个执行备份的 shell 脚本。我在 cron 中设置了这个脚本,但问题是备份很重,因此可以在第一次 rsync 结束之前执行第二次 rsync。 我想在脚本中启动 rsync,然后获取 PID 并编写一个文件,脚本检查进程是否存在(如果该文件存在或不存在)。 如果我将 rsync 置于后台,我会得到 PID,但我不知道如何知道 rsync 何时结束,但是,如果我设置 rsync(无背景),我无法在进程完成之前获得 PID,所以我无法编写文件白衣PID。
我不知道去 "have rsync control" 的最佳方式是什么,也不知道什么时候结束。
我的脚本
#!/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
有人能帮帮我吗?!
提前致谢!! :)
像这样测试 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
希望对您有所帮助!!!
# check to make sure script isn't still running
# if it's still running then exit this script
sScriptName="$(basename [=10=])"
if [ $(pidof -x ${sScriptName}| wc -w) -gt 2 ]; then
exit
fi
- pidof 查找进程的 pid
- -x 告诉它也要查找脚本
- ${sScriptName} 只是脚本的名称...您可以对其进行硬编码
- wc -w returns 字数
- -gt 2 不超过1个实例运行(实例加1用于pidof检查)
- 如果不止一个实例运行然后退出脚本
让我知道这是否适合你。