Installing a Web, Email & MySQL Database Cluster on Debian 8.4 Jessie with ISPConfig 3.1 - Page 4

This tutorial exists for these OS versions

On this page

  1. 7 Install Unison

7 Install Unison

Next we install Unison. Unison is used to sync the /var/www directory between server1 and server2.

Install unison on server1 and server2 with

apt-get install unison

Now we install a unison configuration file on server1:

Create a new file /root/.unison/web:

mkdir /root/.unison
vi /root/.unison/web.prf

... and add the following content:

# Roots of the synchronization
root = /var/www
root = ssh://
# Paths to synchronize
#path = www
#path = vmail
# Some regexps specifying names and paths to ignore
#ignore = Path stats    ## ignores /var/www/stats
#ignore = Path stats/*  ## ignores /var/www/stats/*
#ignore = Path */stats  ## ignores /var/www/somedir/stats, but not /var/www/a/b/c/stats
#ignore = Name *stats   ## ignores all files/directories that end with "stats"
#ignore = Name stats*   ## ignores all files/directories that begin with "stats"
#ignore = Name *.tmp    ## ignores all files with the extension .tmp
ignore = Name sess_*
ignore = Name *access.log*
ignore = Name error.log
ignore = Name webalizer.conf
# When set to true, this flag causes the user interface to skip # asking for confirmations on non-conflicting changes. (More # precisely, when the user interface is done setting the # propagation direction for one entry and is about to move to the # next, it will skip over all non-conflicting entries and go # directly to the next conflict.) auto=true # When this is set to true, the user interface will ask no # questions at all. Non-conflicting changes will be propagated; # conflicts will be skipped. batch=true # !When this is set to true, Unison will request an extra # confirmation if it appears that the entire replica has been # deleted, before propagating the change. If the batch flag is # also set, synchronization will be aborted. When the path # preference is used, the same confirmation will be requested for # top-level paths. (At the moment, this flag only affects the # text user interface.) See also the mountpoint preference. confirmbigdel=true # When this preference is set to true, Unison will use the # modification time and length of a file as a `pseudo inode # number' when scanning replicas for updates, instead of reading # the full contents of every file. Under Windows, this may cause # Unison to miss propagating an update if the modification time # and length of the file are both unchanged by the update. # However, Unison will never overwrite such an update with a # change from the other replica, since it always does a safe # check for updates just before propagating a change. Thus, it is # reasonable to use this switch under Windows most of the time # and occasionally run Unison once with fastcheck set to false, # if you are worried that Unison may have overlooked an update. # The default value of the preference is auto, which causes # Unison to use fast checking on Unix replicas (where it is safe) # and slow checking on Windows replicas. For backward # compatibility, yes, no, and default can be used in place of # true, false, and auto. See the section "Fast Checking" for more # information. fastcheck=true # When this flag is set to true, the group attributes of the # files are synchronized. Whether the group names or the group # identifiers are synchronizeddepends on the preference numerids. group=true # When this flag is set to true, the owner attributes of the # files are synchronized. Whether the owner names or the owner # identifiers are synchronizeddepends on the preference # extttnumerids. owner=true # Including the preference -prefer root causes Unison always to # resolve conflicts in favor of root, rather than asking for # guidance from the user. (The syntax of root is the same as for # the root preference, plus the special values newer and older.) # This preference is overridden by the preferpartial preference. # This preference should be used only if you are sure you know # what you are doing! prefer=newer # When this preference is set to true, the textual user interface # will print nothing at all, except in the case of errors. # Setting silent to true automatically sets the batch preference # to true. silent=true # When this flag is set to true, file modification times (but not # directory modtimes) are propagated. times=false

#          When this flag is set, Unison will log all changes to the filesystems on a file.

#          When this flag is set to true, groups and users are synchronized numerically, rather than by name.
#          The special uid 0 and the special group 0 are never mapped via user/group names even if this
#          preference is not set.

We want to automate synchronization, so we create a small script and create a cronjob on server1:

mkdir /root/scripts
vi /root/scripts/

and add the following content:


if [ ! -f /$lockdir/unison ]; then
        touch $lockdir/unison

        $UNISON -testserver web
        if [[ $rc != 0 ]] ; then
                echo "error"
                $LOGGER -d -t unison "web - error connecting remote"
                $UNISON web

        rm $lockdir/unison
        $LOGGER -d -t unison "unison already running"

make the script executable:

chmod 700 /root/scripts/

And run the first sync. To get some output during the sync set silent = false in /root/.unsion/web.prf. Afterwards, start unison:


Finally, we create the cronjob:

crontab -e
# unison
*  * * * *  /root/scripts/ > /dev/null
Share this page:

Suggested articles

4 Comment(s)

Add comment


By: diablo666

 The replica with unison is not very well if you had high numbers of files, there are better solution with drbd, glusterfs or other things...

By: till

I had a similar setup to this tutorial with Glusterfs and the performance was very bad, glusterfs is not able to handle many small files like you have them in websites. Unison worked way better for me on that setup. I did not test DRBD for that purpose yet.

By: Gwyneth Llewelyn

The script is not really necessary, a much simpler entry on crontab will do the trick:

* * * * * /usr/bin/flock -n /var/lock/unison.cron /usr/bin/unison &> /dev/null

By: DirtyTodd



Warning: No archive files were found for these roots, whose canonical names are:



This can happen either

because this is the first time you have synchronized these roots,

or because you have upgraded Unison to a new version with a different

archive format.


Update detection may take a while on this run if the replicas are



Unison will assume that the 'last synchronized state' of both replicas

was completely empty.  This means that any files that are different

will be reported as conflicts, and any files that exist only on one

replica will be judged as new and propagated to the other replica.

If the two replicas are identical, then no changes will be reported.


If you see this message repeatedly, it may be because one of your machines

is getting its address from DHCP, which is causing its host name to change

between synchronizations.  See the documentation for the UNISONLOCALHOSTNAME

environment variable for advice on how to correct this.

on running /root/scripts/

Donations to the Unison project are gratefully accepted: