I recently have been working with a computer in remote Alaska that is connected to the internet via a highly unreliable cellular modem. It turns out that the antenna placement on this device leads to a ton of interference with the other equipment in the enclosure, resulting in lost packets and generally abysmal connectivity. I needed to get some files off the computer, and rsync was the obvious tool for the job. Most of the time, though, rsync wouldn’t even connect. And on the one-in-roughly-twenty times it did manage to connect, it would probably fail partway through. This required persistence. Here’s an example of a shell script I used to continuously retry an rsync command until it succeeds.
#!/bin/bash while true; do # -a archive mode # -z compress files during transfer (crucial!) # -P enable partial transfers (also crucial!) and show progress rsync -azP --timeout=10 server.example.org:~/my_directory . # success if we have a zero return code if [ $? -eq 0 ]; then echo "Success." break else echo "Failure. Retrying in 5 seconds." sleep 5 fi done