Skip to content

Instantly share code, notes, and snippets.

@canonex
Last active September 6, 2025 08:56
Show Gist options
  • Save canonex/63668f6a40c5528f1bbfdce6f8afffc8 to your computer and use it in GitHub Desktop.
Save canonex/63668f6a40c5528f1bbfdce6f8afffc8 to your computer and use it in GitHub Desktop.
Rsync and a lock file: flock
#!/bin/bash
# Example of flock use with rsync where local files are pushed to a remote server using a ssh and a key.
# Using flock is useful when file copying is slow and the transfer duration may overlap with a newly scheduled run.
# For example, if a large number of files are uploaded in one day in an office, whose backup is scheduled every day, and the transfer may take more than 24 hours.
# Flock use a lock file: if it already exist it does not execute the command (-n option)
# Read more on https://www.man7.org/linux/man-pages/man1/flock.1.html
flock -n rsyncExec.lock -c 'rsync -aAXH --info=progress2 --delete --delete-excluded -e "ssh -p 12345 -i /myuser/.ssh/mykey" /myrepo/mydata/ [email protected]:/mybackup/myfolder/'
# An example using ssh config file and basic logging
flock -n rsyncExec.lock -c 'rsync -aAXH --info=progress2 --delete --delete-excluded /myrepo/mydata/ MyServerInSshConfig:/mybackup/myfolder/; echo Exit code: $? - $(date) >> backup.log'
# instead of using a log file it is also possible to use the system log using logger instead of echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment