web-dev-qa-db-fra.com

Démarrer le démon Rsync pour synchroniser un répertoire entre deux serveurs

Je souhaite synchroniser un répertoire sur le serveur A avec un serveur B.

Sur le serveur A, j'ai créé un fichier rsyncd.conf avec le contenu:

uid             = rsync
gid             = rsync
use chroot      = no
pid file        = /var/run/rsyncd.pid

[share]
  comment = share
  path = /etc/dirtosync
  read only = false
  list = yes
  hosts allow = *
  auth users = rsync
  secrets file = /etc/rsyncd.secrets

Et j'ai créé sur le serveur A le fichier /etc/rsyncd.secrets avec le contenu:

rsync:rsync

J'ai également créé sur le serveur A le fichier pid et l'utilisateur rsync avec le mot de passe rsync.

Sur le serveur A, sur le fichier: /etc/default/rsync, je mets la valeur RSYNC_ENABLE à true et j'ai lancé le démon rsync avec la commande:

/etc/initd/rsync start

Sur le serveur A et le serveur B, le propriétaire et le groupe du répertoire sont rsync.

J'ai lancé sur la machine B la commande:

rsync -avzr rsync@<serverA>:/etc/dirtosync/* /etc/dirtosync/

J'ai aussi essayé sur le serveur A la commande

rsync -avzr /etc/dirtosync/* rsync@<serverB>:/etc/dirtosync/

Avec ces deux commandes, le résultat est le même: les fichiers sont synchronisés une seule fois lorsque je lance la commande, mais après si je modifie les fichiers sur le serveur A, ils ne sont pas synchronisés avec le serveur B.

Dois-je faire autre chose pour que le fichier soit synchronisé?

5
hedi691

Vous comprenez mal comment rsync fonctionne. rsync ne réplique pas automatiquement les modifications. Ce n'est pas comme Dropbox ou un logiciel similaire. rsync synchronise uniquement les fichiers une fois à chaque exécution. Si vous souhaitez synchroniser plus souvent, placez la commande rsync dans un script cron (par exemple, regardez dans /etc/cron.daily ). Si vous voulez quelque chose qui synchronise automatiquement les modifications, comme le fait la liste déroulante, regardez un autre projet, tel que Sparkle Share ou ownCloud .

4
bain

Vous pouvez également utiliser lsyncd: https://github.com/axkibe/lsyncd . J'utilise jusqu'à présent et c'est génial pour ça.

La syntaxe rsyncque vous avez publiée fonctionne en supposant que vous avez omis le nom d'hôte/IP de la machine, mais que vous n'utilisez pas le partage rsyncque vous avez configuré. Pour utiliser le partage, vous devez modifier votre syntaxe comme suit pour utiliser le partage:

rsync -av rsync@MACHINE-A::share/ /etc/dirtosync/

Cependant, cela ne configurera toujours pas une synchronisation continue entre ces dossiers. Ce que vous semblez rechercher est une synchronisation bidirectionnelle pour ces dossiers, que vous pouvez configurer dans le cron ou commencer à utiliser logiciel de synchronisation de fichiers Unison .

Unison n'est plus bien entretenu et je ne l'ai pas utilisé moi-même, mais j'en ai entendu de grandes choses. Il enregistre les modifications apportées aux fichiers dans un répertoire que vous avez configuré pour la synchronisation et les copie périodiquement à l'aide de rsyncou d'une autre méthode (configurable).

Si vous allez suivre la route rsyncname __-in-the-cron, vous voudrez utiliser l'option -u qui indique à rsyncde ne copier que les fichiers les plus récents. Vous rencontrerez cependant des problèmes avec les fichiers supprimés réapparaissant avec cette approche.

0
jkt123