Se você colocar o PID do script no arquivo de bloqueio, se o arquivo de bloqueio existir quando uma nova instância for iniciada, você poderá ler o PID e verificar se o script ainda está em execução. Se o script não estiver sendo executado, limpe-o, coloque o PID da instância atual no arquivo de bloqueio e inicie o rsync, caso contrário, imprima uma mensagem 'ainda em execução' e saia.
EDITAR:
#!/bin/bash
backup() {
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/Users/admin/Documents/Backup/rsync-key
RUSER=philosophy
RHOST=example.com
RPATH=data/
LPATH="/Volumes/G Technology G Speed eS/Backup"
$RSYNC -avz --delete --progress -e "$SSH -i $KEY" "$LPATH" $RUSER@$RHOST:$RPATH
}
LOCKFILE=/Users/admin/Documents/backup.isrunning
if [ ! -e "$LOCKFILE" ]
then
echo $$ >"$LOCKFILE"
backup
else
PID=$(cat "$LOCKFILE")
if kill -0 "$PID" >&/dev/null
then
echo "Rsync - Backup still running"
exit 0
else
echo $$ >"$LOCKFILE"
echo "Warning: previous backup appears not to have finished correctly"
backup
fi
fi
rm -f "$LOCKFILE"