Surveiller files images et _posts
Pour ce besoin, utilisez inotify, via inotifywait du paquet inotify-tools.
- inotify : idéal pour déclencher immédiatement un script lors de créations, modifications, suppressions ou déplacements.
- auditd : plutôt destiné à l’audit de sécurité et à la traçabilité — utilisateur, processus, appels système, journaux persistants. Il est plus lourd et moins pratique pour lancer directement une action.
inotify signale des événements système comme CREATE, CLOSE_WRITE, DELETE et MOVED_TO; attention, les événements de déplacement peuvent arriver en deux parties et ne sont pas atomiques.
Script synchro local distant
Exécuter ce dry-run : il affichera les fichiers qui seraient copiés, mis à jour ou supprimés, sans effectuer aucune modification.
1
2
3
4
5
6
7
for dir in files images _posts; do
echo "=== Simulation : ${dir} ==="
rsync -avzn --delete --itemize-changes \
-e "ssh -p 55229 -i /home/yann/.ssh/vm-105" \
"/home/yann/media/statique/${dir}/" \
"debjek@192.168.0.229:/home/debjek/chirpy/${dir}/"
done
Lecture rapide du résultat
>f+++++++++ fichier: fichier qui serait ajouté sur le serveur.>f..t...... fichier: fichier qui serait mis à jour, par exemple parce que sa date diffère.*deleting fichier: fichier qui serait supprimé du serveur à cause de--delete.- Aucune ligne de changement : le dossier local et le dossier distant sont déjà synchronisés.
-n signifie --dry-run : ni copie ni suppression ne seront réalisées.
1. Installer inotify-tools
1
sudo pacman -S inotify-tools
2. Créer le script de synchronisation
Créer le fichier :
1
2
mkdir -p /home/yann/bin
nano /home/yann/bin/traiter-media.sh
Contenu :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env bash
set -u
# Empêche deux synchronisations simultanées
exec 9>/tmp/rsync-media-statique.lock
if ! flock -n 9; then
echo "Une synchronisation est déjà en cours."
exit 0
fi
for dir in files images _posts; do
echo "=== Synchro : ${dir} ==="
rsync -avz --delete --itemize-changes \
-e "ssh -p 55229 -i /home/yann/.ssh/vm-105" \
"/home/yann/media/statique/${dir}/" \
"debjek@192.168.0.229:/home/debjek/chirpy/${dir}/"
done
Rendre le script exécutable :
1
chmod +x /home/yann/bin/traiter-media.sh
Cette commande synchronise :
1
2
3
/home/yann/media/statique/files/ → /home/debjek/chirpy/files/
/home/yann/media/statique/images/ → /home/debjek/chirpy/images/
/home/yann/media/statique/_posts/ → /home/debjek/chirpy/_posts/
Tester manuellement :
1
/home/yann/bin/traiter-media.sh
3. Créer le script de surveillance inotify
Créer le fichier :
1
nano /home/yann/bin/surveiller-media.sh
Contenu :
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
#!/usr/bin/env bash
set -u
WATCH_ROOT="/home/yann/media/statique"
SYNC_SCRIPT="/home/yann/bin/traiter-media.sh"
inotifywait \
--monitor \
--recursive \
--format '%e|%w%f' \
--event create \
--event close_write \
--event delete \
--event moved_to \
--event moved_from \
"$WATCH_ROOT/files" \
"$WATCH_ROOT/images" \
"$WATCH_ROOT/_posts" |
while IFS='|' read -r events path; do
echo "Événement détecté : $events — $path"
# Petit délai pour éviter de réagir à des événements en rafale
sleep 1
"$SYNC_SCRIPT"
done
Rendre le script exécutable :
1
chmod +x /home/yann/bin/surveiller-media.sh
Tester au premier plan :
1
/home/yann/bin/surveiller-media.sh
Dans un autre terminal, créez ou modifiez un fichier :
1
touch /home/yann/media/statique/_posts/test.md
Vous devriez voir rsync s’exécuter. Arrêtez ensuite le test avec Ctrl+C.
4. Créer le service systemd utilisateur
Créer le répertoire si nécessaire :
1
mkdir -p /home/yann/.config/systemd/user
Créer le service :
1
nano /home/yann/.config/systemd/user/surveiller-media.service
Contenu :
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Surveillance et synchronisation des fichiers media
[Service]
Type=simple
ExecStart=/home/yann/bin/surveiller-media.sh
Restart=on-failure
RestartSec=2
[Install]
WantedBy=default.target
5. Activer le service
Recharger la configuration systemd utilisateur :
1
systemctl --user daemon-reload
Activer le service au démarrage de la session :
1
systemctl --user enable surveiller-media.service
Le démarrer immédiatement :
1
systemctl --user start surveiller-media.service
Ou, en une seule commande :
1
systemctl --user enable --now surveiller-media.service
6. Vérifier le fonctionnement
État du service :
1
systemctl --user status surveiller-media.service
Afficher les journaux en direct :
1
journalctl --user -u surveiller-media.service -f
Tester avec une modification :
1
echo "Test inotify" >> /home/yann/media/statique/_posts/test.md
7. Commandes d’administration
Arrêter le service :
1
systemctl --user stop surveiller-media.service
Redémarrer le service :
1
systemctl --user restart surveiller-media.service
Désactiver le démarrage automatique :
1
systemctl --user disable --now surveiller-media.service
Voir les événements détectés par inotify :
1
2
3
4
5
6
inotifywait \
--monitor \
--recursive \
--format '%T %e %w%f' \
--timefmt '%F %T' \
/home/yann/media/statique/{files,images,_posts}
La chaîne finale est donc :
1
2
3
4
5
6
7
8
9
modification manuelle
↓
inotifywait
↓
surveiller-media.sh
↓
traiter-media.sh
↓
rsync vers le serveur distant