Synchronisation de répertoires entre deux machines

Rédigé par pep | Classé dans : Linux

24
04 | 12

Fini les crontab / rsync pour synchroniser un répertoire sur 2 machines. Inosync utilise le service inotify des derniers noyaux linux. Ainsi chaque fois qu'un changement est détecté, la synchronisation est effectuée.

Sous Debian, il existe un paquet inosync qui contient juste le minimum : le démon inosync, une page man et quelques fichiers d'exemple.

Bref tout est à faire !

Sur serveur_1.example.org :

Créer le répertoire /etc/inosync qui contiendra les fichiers de conf.

Éditez le ficher /etc/inosync/test.py

# directory that should be watched for changes
wpath = "/home/test/"
# exclude list for rsync
rexcludes = [
]
# common remote path
rpath = "/home/test/"
# remote locations in rsync syntax
rnodes = [
	"serveur_2.example.org:" + rpath,
]
# limit remote sync speed (in KB/s, 0 = no limit)
#rspeed = 0
# event mask (only sync on these events)
#emask = [
#	"IN_CLOSE_WRITE",
#	"IN_CREATE",
#	"IN_DELETE",
#	"IN_MOVED_FROM",
#	"IN_MOVED_TO",
#]
# event delay in seconds (prevents huge amounts of syncs, but dicreases the
# realtime side of things)
# edelay = 10
# rsync log file for updates
logfile = /var/log/inosync.log
# rsync binary path
rsync = "/usr/bin/rsync"

Ce fichier doit être adapté et déposé sur serveur_2.example.org.

Le script de démarrage permet d'avoir plusieurs fichiers de conf afin de surveiller plusieurs répertoires, un fichier de conf par répertoire.

/etc/init.d/inosync

#!/bin/bash
### BEGIN INIT INFO
# Provides: 	 inosync	
# Required-Start:   $local_fs $network $syslog $named
# Required-Stop:    $local_fs $network $syslog $named
# Default-Start: 	2 3 4 5
# Default-Stop:     0 1 6
### END INIT INFO

LOG=/var/log/inosync.log
INOSYNC=/usr/bin/inosync

case "$1" in
	start)
        if ls /var/run/inosync_* 2>/dev/null; then
            echo "Inosync en cours ..."
            exit 1
        fi
    	echo "Inosync start"
        rep=`ls /etc/inosync/*py 2> /dev/null`
        for r in $rep; do
            $INOSYNC -d -v -c $r
            pid=`pgrep -f -n '/usr/bin/inosync'`
            echo $pid > /var/run/inosync_`basename $r`.pid
        done
	    ;;
	stop)
    	echo "Inosync stop"
        kill=`ls /var/run/inosync*.pid 2>/dev/null`
        for k in $kill; do
         	kill -15 `cat $k`
            rm -f $k
        done
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    status)
    	echo "Inosync status"
        kill=`ls /var/run/inosync*.pid 2>/dev/null`
        for k in $kill; do
         	echo $k
        done
        ;;
	*)
	    echo "Usage: $0 (start|stop|restart|status)"
	    ;;
esac

update-rc.d inosync defaults, afin de lancer le service au démarrage, et c'est bon.

Le service inosync ne synchronise que les fichiers dans le répertoire surveillé. Si un répertoire est créé, il n'est pas synchronisé sur la machine distante. Celà doit venir des options passées à rsync. Je n'ai pas trouvé de moyen, pour l'instant, de synchroniser les nouveaux répertoires.

Site officiel : https://github.com/hollow/inosync

Mots clés : linux synchronisation répertoires

Les commentaires sont fermés.