How to sync files with lsyncd

lsyncd

Introduction

We’ve already talked about using tools like rsync for managing backup of your systems, but there’s another “problem” which has to be solved if you have multiple remote computers: synchronization.
In this article, we’ll talk about lsyncd, a daemon that enables you to mirror your directories to any other directory on your network, or even locally. For performance purposes, it only mirror changes to your directory.

Install

If you use Ubuntu, you’ll find it already in the repositories:

# apt install lsyncd

If you’re a RHEL/CentOS/Fedora user, then you have to enable EPEL first. Then:

# yum install lsyncd

After installation, you’ll find sample configurations in

/usr/share/doc/lsyncd/examples/

or in

/usr/share/doc/lsyncd-VERSION/examples/

, depending on whether you are using Ubuntu or RedHat-based distros.

Configuring a local syncing

So, for testing, let’s try a local syncing with lsyncd.
First, let’s create a “source folder”, containing the files we want to sync.

$ mkdir -p $HOME/unixmen/sync_source

Then, we’ll make a backup folder:

$ mkdir $HOME/sync_backup

Just for test, populate the source directory with zero-lenght files, using touch command:

touch $HOME/unixmen/sync_source/unixmentest{1..10}0

Now, make log and status files:

# mkdir /var/log/lsyncd
# touch /var/log/lsyncd.{log,status}

Configuration file goes on

/etc/lsyncd

:

# mkdir /etc/lsyncd

In there, we’ll create a new config file:

# nano /etc/lsyncd/lsyncd.conf.lua

Where we’ll put the following code:

settings = {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
default.rsync,
source = "$HOME/unixmen/sync_source/",
target = "$HOME/sync_backup",
}

Right now, if you look in the backup directory, you’ll find it empty, because the service is not running.
But, to solve this, simply restart lsyncd with the following:

# systemctl restart lsyncd

It will start (and keep) syncing, even if you add more files on sync_source. It works completely in automated mode.

Conclusion

In a similar way, you can sync remote files, with just the difference that you’ll use SSH, and varying just a little bit in the conf file.
There are a lot of examples that you can look for in

/usr/share/doc/lsyncd/examples/

, or just lsyncd documentation. Happy syncing!