Isso não responde à sua pergunta sobre flock
, mas pode ajudar independentemente disso. Houve uma pergunta semelhante sobre as estratégias de backup há algum tempo e eu gostei minha resposta suficiente para implementá-la.
A idéia básica é fazer com que seu script de backup crie um arquivo no destino de backup quando ele for concluído e exclua o arquivo assim que ele começar a ser executado. Então, você faz um teste de script para a existência do arquivo e apenas permite que ele seja executado se o arquivo existir:
#!/usr/bin/env bash
## Make sure no backup is currently running
if [ ! -e /path/to/backup/backup_finished.txt ]; then
echo "A backup seems to be running, or did not finish correctly, exiting." &&
exit;
fi
## Delete the file from the remote server
ssh user@remote rm /path/to/backup/backup_finished.txt
## Do da rsync
rsync /path/to/source/ user@remote:/path/to/daily/backup/
## Create the file on the remote server
ssh user@remote touch /path/to/backup/backup_finished.txt
Esta é uma abordagem muito mais simplista do que a sua, mas tem a vantagem de que eu posso pegar (embora não lidar de forma graciosa) backups inacabados. Você pode expandir isso para testar se um backup está realmente em execução ou se um antigo não saiu corretamente e reagiu de acordo.
Como você precisa monitorar processos nas máquinas locais e remotas, não acho que um sistema de arquivos de bloqueio funcionará.