Relayium

Automatiser les sauvegardes serveur chiffrées avec une tâche cron

Dernière mise à jour: 2026-09-01

Les sauvegardes qu'il faut penser à lancer soi-même finissent par ne pas être faites. cron, lui, s'en souvient, et la CLI Relayium est conçue pour cela : une seule commande non interactive qui copie (ou met en miroir) un répertoire vers une autre machine et vérifie chaque fichier qu'elle transfère.

Ce guide couvre la planification de relayium push et du relayium sync incrémental via cron, le transport daemon-direct que l'un comme l'autre utilisent, et des lignes de crontab prêtes à copier.

push ou sync : copie complète ou miroir incrémental

push et sync déplacent tous deux un répertoire vers une autre machine, et tous deux peuvent être exécutés sans risque de façon répétée, mais ils résolvent des problèmes de sauvegarde légèrement différents.

push crée une copie daemon-direct ponctuelle protégée contre les collisions et refuse une destination existante au lieu de l'écraser ou de reprendre — ce qui ne convient pas à une tâche répétée vers un répertoire de réception fixe. sync, lui, maintient une destination comme miroir incrémental à sens unique de la source : les fichiers inchangés sont sautés, les fichiers modifiés envoyés, et un fichier partiel est poursuivi à l'exécution suivante. En tant que miroir, il reflète l'état actuel et non l'historique : la suppression ou la corruption d'un fichier source peut être propagée.

  • Utilisez push vers une destination datée quand chaque exécution doit être autonome et que les copies plus anciennes doivent survivre.
  • Utilisez sync pour un répertoire volumineux ou qui change souvent, où tout renvoyer chaque nuit serait un gaspillage.
  • Les deux vérifient chaque fichier transféré par SHA-256. push ne reprend pas ; sync poursuit un fichier partiel lors d'une exécution ultérieure.

Avant de commencer

Tout ci-dessous passe par la CLI relayium, alors installez-la d'abord si ce n'est pas fait. Sous macOS ou Linux, une commande place un binaire précompilé dans votre PATH :

curl -fsSL https://relayium.com/install.sh | sh
  • Vous préférez choisir le fichier vous-même, ou sous Windows ? Récupérez un binaire depuis la page des releases — relayium.com/cli liste toutes les options (avec Go, go build ./cmd/relayium).
  • relayium --version confirme l'installation. Sans cela, les commandes ci-dessous affichent seulement « command not found ».

Un seul transport : daemon-direct

Pointez l'une ou l'autre commande vers une destination relayium:// dont la machine réceptrice exécute relayium serve. Les destinations SSH sont retirées.

# daemon-direct : la destination exécute "relayium serve"
relayium push ./data relayium://backup-server:9031
  • Les connexions daemon-direct utilisent du TLS 1.3 épinglé avec confiance à la première utilisation (trust-on-first-use), puis sont vérifiées contre cette même empreinte à chaque exécution suivante.
  • sync accepte la même forme de destination relayium:// que push.

Le planifier avec cron

Ce qu'il vous faut avant l'étape 1

  • La CLI sur les deux machines, avec relayium serve en cours d'exécution sur la destination.
  • Une destination qui exécute relayium serve et a pré-autorisé cet expéditeur. cron n'a pas de terminal : une empreinte inconnue est donc refusée au lieu de déclencher une question.
  • Un répertoire source qui existe au moment où cron se déclenche — pas un montage réseau présent seulement pendant que vous êtes connecté.
  • Un endroit où écrire un journal. Une tâche cron dont la sortie ne va nulle part est une sauvegarde dont vous découvrirez l'état le jour où vous en aurez besoin.

Une fois l'expéditeur pré-autorisé, sync est une seule commande non interactive qui s'insère directement dans une crontab. Journalisez la sortie pour que les échecs soient visibles :

# miroir incrémental toutes les 15 minutes
*/15 * * * * relayium sync ~/documents relayium://backup-server:9031 >> ~/relayium-sync.log 2>&1
  1. Trouvez où se trouve réellement relayium. cron n'utilise pas le PATH de votre shell, et install.sh se rabat sur ~/.local/bin quand /usr/local/bin n'est pas accessible en écriture — précisément l'endroit que cron ne voit jamais.

    command -v relayium
  2. Vérifiez que l'écouteur est joignable et que cet expéditeur a déjà été autorisé.

    relayium id
  3. Exécutez la commande entière une fois à la main, écrite exactement comme cron l'exécutera, chemin absolu compris.

    /usr/local/bin/relayium sync ~/documents relayium://backup-server:9031
  4. Ensuite seulement, ajoutez la planification. Gardez le chemin absolu et la redirection.

    crontab -e
  5. Après le premier passage planifié, lisez le journal au lieu de supposer. C'est l'étape que l'on saute, et c'est celle qui vous l'aurait dit.

    tail -n 20 ~/relayium-backup.log

À quoi ressemble une installation qui fonctionne

relayium se résout en un chemin absolu que vous pouvez coller dans la crontab, et un sync daemon-direct lancé à la main se termine avec 0 sans demander d'autoriser un expéditeur inconnu. Une copie qui ne fonctionne qu'après une approbation interactive n'est pas encore planifiée.

$ command -v relayium
/usr/local/bin/relayium
$ /usr/local/bin/relayium sync ~/documents relayium://backup-server:9031
$ echo $?
0
  • La commande se termine avec un code non nul si un fichier échoue à sa vérification d'intégrité, si bien que la notification par e-mail en cas d'échec de cron détecte les problèmes.
  • Un sync interrompu rattrape son retard à l'exécution planifiée suivante : ce qui correspond déjà est sauté et un fichier partiel est poursuivi.

Mettre en miroir les suppressions et synchroniser en temps réel

Par défaut, sync ne fait qu'ajouter ou mettre à jour des fichiers du côté destination. Ajoutez --delete pour en faire un véritable miroir qui supprime aussi les fichiers que la source n'a plus — le côté récepteur doit explicitement écouter avec serve --allow-delete, sinon les suppressions sont silencieusement ignorées et signalées comme refusées. sync refuse aussi purement et simplement --delete si le répertoire source ne résout aucun fichier, si bien qu'une faute de frappe dans le chemin source ne peut pas vider la destination.

Si vous préférez ne pas attendre le prochain passage de cron, --watch garde relayium sync en cours d'exécution et resynchronise automatiquement peu après qu'un fichier sous la source change — une solution légère, sans interrogation périodique.

  • relayium sync ./data relayium://backup-server:9031 --delete met en miroir les suppressions (le récepteur a besoin de serve --allow-delete).
  • relayium sync ./data relayium://backup-server:9031 --watch reste en cours d'exécution et resynchronise à chaque changement, au lieu d'une exécution unique via cron.

Quand ça ne marche pas

Chacun de ces cas est invisible tant que vous ne regardez pas le journal — c'est pourquoi la redirection figure dans la ligne de crontab et n'est pas facultative. Le cinquième est pire qu'invisible : il ressemble à une réussite.

Symptôme, vérification, correction

Le journal indique relayium: command not found, alors que la même commande marche dans votre shell.
tail -n 5 ~/relayium-backup.log
# /bin/sh: relayium: command not found

cron tourne avec un PATH minimal, en général seulement /usr/bin:/bin. Si install.sh n'a pas pu écrire dans /usr/local/bin, le binaire est dans ~/.local/bin, que cron ne cherchera jamais. Mettez le chemin absolu donné par command -v dans la ligne de crontab, ou ajoutez une ligne PATH= en tête de crontab.

Le journal affiche « SSH transfers are currently disabled », ou plus rien après la première exécution.
grep -i "SSH transfers" ~/relayium-sync.log
# SSH transfers are currently disabled. Use relayium pair, or relayium serve with push/sync to relayium://host.

La commande planifiée désigne encore une ancienne destination SSH, et les transferts SSH sont retirés. Lancez relayium serve sur le serveur de sauvegarde, autorisez-y l'empreinte relayium id de cette machine et changez la cible en relayium://backup-server — plus aucune clé SSH, agent ou phrase de passe n'intervient.

sync s'exécute proprement, mais les fichiers supprimés à la source sont toujours sur la destination.
grep -i deni ~/relayium-sync.log

La suppression se décide côté récepteur. Sans serve --allow-delete en face, les suppressions sont ignorées et renvoyées comme refusées — voilà pourquoi la réponse est dans le journal et pas dans le code de sortie. Relancez l'écouteur d'en face avec --allow-delete.

sync refuse purement et simplement --delete.
relayium sync ~/documents relayium://backup-server:9031 --delete
# refusing --delete with an empty source: this would delete everything on the destination. Check the path(s).

La source n'a résolu aucun fichier, le miroir aurait donc vidé la destination. Ce refus est délibéré. Vérifiez le chemin, et vérifiez que ce qui doit y être monté l'est bien à l'heure où cron se déclenche et pas seulement quand vous êtes connecté.

La sauvegarde tourne, se termine par 0, et n'est pas ce que vous croyez.
ssh user@backup-server command -v relayium

Les push et sync actuels exigent un écouteur Relayium. Installez la CLI sur la destination, lancez serve, autorisez l'expéditeur et utilisez une cible relayium:// ; il n'existe aucun transport de repli silencieux.

Questions fréquentes

Le serveur de sauvegarde a-t-il besoin de relayium installé ?

Oui. Les push et sync actuels utilisent le protocole natif daemon-direct et exigent relayium serve sur le destinataire. Il n'y a aucun repli SSH ou tar.

La sauvegarde est-elle chiffrée et vérifiée ?

Oui pendant le transfert, et chaque fichier transféré est vérifié par SHA-256. sync décide de ce qu'il envoie d'après la taille et la date de modification, donc un fichier sauté n'est pas re-haché. Des tailles de répertoire identiques sont un contrôle de cohérence, pas la preuve que les contenus sautés correspondent encore.

Que se passe-t-il si la tâche cron est interrompue en cours de route ?

Cela dépend de la commande que vous avez planifiée. sync continue : l'exécution suivante saute ce qui correspond déjà et poursuit un fichier partiel, et --no-resume désactive cela. push ne reprend pas — il refuse une destination qui existe déjà ; pour des exécutions répétées, planifiez donc sync ou poussez vers une nouvelle destination à chaque exécution. --no-resume est accepté par push et n'y fait rien.

--delete peut-il vider ma destination par accident ?

sync refuse de s'exécuter avec --delete si le répertoire source ne contient aucun fichier, et le récepteur doit être démarré avec serve --allow-delete pour que les suppressions prennent effet — sinon elles sont ignorées et vous sont signalées.

Ai-je besoin d'un compte, est-ce payant ?

Non. La CLI est gratuite, et push/sync en daemon-direct ne demande ni compte Relayium ni paiement par transfert.

Confiez vos sauvegardes à une planification dont vous n'avez pas à vous souvenir — chiffré en transit, vérifié fichier par fichier et gratuit.

Obtenir la CLI

À lire ensuite