How to Rsync between two Linux servers

Background

rsync is powerful and easy to use utility to keep files in sync between two servers. The principal way of rsync‘s command structure  is to push files from point A to point B.

A Basic Example of an 

rsync

 Command

rsync -vzru /home/location_A/ user@server2.example.com:/home/location_B/

In the command above, files from 

location_A

 on a local disk and server is `pushed` to 

location_B

 on 

server2

.

The flags means the following:

v = verbose
z = compress
 
r = recurse into directories
u = skip files that are newer on the receiver
 

The 

r

 is really useful because it means all directories and subdirectories will be copied.

u

 means that it won’t copy files again which are the same as the destination receiver

Rsync Example with Custom SSH Port and Preserve Directory Permissions and Attributes

rsync -vrzua -e 'ssh -p 34229' /home/location_A/ user@server2.example.com:/home/location_B/

In the above example, two additional flags were added, namely 

a

 and 

-e

. These means:

-e 'ssh -p PORT'
a = archive which preserves permissions

The 

a

 switch is extremely useful as it will copy all the attributes, e.g. directory permissions and so on.

Using 

rsync

 in Real Time

Typically 

rsync

 commands are stored in a 

CRON

 to run every XX minutes.

If you want continuous 

rsync

, and you are well aware of what it’s going to do to your network traffic, then you need to use an utility called 

flock

 because running one 

rsync

 if the previous one hasn’t completed will cause problems.

Here is an example of the flock command:

flock -n lock_file -c "rsync ..."

References

man rsync

 produces:

-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Last updated byChris Grant on 23rd March 2021