This Unison program is great. It neatly handles syncing between two servers where changes are occurring on both sides. On one client site it takes about 30 seconds to compare/sync a 23GB /var/www/html/ structure with about 100 sites.
1) Install unison (http://www.cis.upenn.edu/~bcpierce/unison/). Requires “ocaml” compiler (http://caml.inria.fr/), and needs the “etags” command from emacs (so “yum install emacs”, whatever)
2) Set up a “/root/.unison/profile-name.prf” file. See example pasted below. Comment out “batch=true” and “silent=true” for initial test runs. Uncomment them for running from a cron job.
3) Run manually to test: unison profile-name
4) If you leave the logging turned on, make an /etc/logrotate.d/unison file, something like this:
1 2 3 4 5 6 7 |
/var/log/unison.log { notifempty daily rotate 7 missingok compress } |
5) Set up cron job(s). Create multiple profiles if specific paths need more frequent syncing. With silent=true, the jobs should produce no output (silent=true automatically sets batch=true).
Sample profile (/root/.unison/profile-name.prf)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# Reasonable defaults auto=true confirmbigdeletes=true contactquietly=true fastcheck=true group=true maxthreads=20 numericids=true owner=true times=true # Dump an archive listing to ~/unison.dump #dumparchives=true # Skip confirmation batch=true # Suppress output (sets batch=true) silent=true # Run in a loop, repeating every X seconds (sort of daemon mode) #repeat=60 # Log all sync operations log=true logfile=/var/log/unison.log # Backup deleted files backup=Name * backuplocation=central backupdir=/var/www/unison-backups # Local root root=/var/www/html/ # Remote root (the double forward-slash between IP and remote path is correct) root=ssh://1.2.3.4//var/www/html/ # Resolve conflicts in favor of local root prefer=/var/www/html/ # Limit to specific relative path (can specify multiple path= params) #path=somepath/ # Don't sync (can specify multiple ignore lines) ignore=Path */var/cache |