Bonjour,
Très récemment, j'ai décidé d'en finir définitivement avec Windows qui ne me servait plus que pour les cours.
J'avais déjà mon debian en dual boot, donc j'installe les logiciels dont j'ai besoin et je me dis qu'il serait bien de mettre en place rsync pour sauvegarder mes cours au cas ou.
J'ai un raspberry pi chez moi donc pas de soucis mais c'est la que j'en viens à vous : comment faire pour que rsync s’exécute dès qu'il détecte un réseau ?
Apres je combinerais ça avec crontab pour qu'il s’exécute au bon moment.
J'imaginais un truc comme ça:
#!/bin/bash
while [ -z $test ]
do
echo test
if [ test_reseau ]; then
rsync
test=0
fi
done
Et le script serait exécuté à 18h tous les jours par exemple.
Peut être un ping google.fr avec un grep ?
N'y a t'il pas une solution plus "propre" ?
Merci d'avance.
# ifup.d
Posté par dyno partouzeur du centre . Évalué à 1.
Cela doit dépendre des distributions mais normalement si tu mets un script shell dans /etc/network/ifup.d/ il s'ecécutera à chaque fois qu'un interface réseau se connecte. Dans ce script tu peux pinger un host comme google.fr et si ça passe, lancer ton rsync.
[^] # Re: ifup.d
Posté par lxtrem . Évalué à 1.
Merci pour cette réponse, j'ai donc placé un script tout simple (juste un echo redirigé vers un fichier) dans /etc/network/if-up.d (légèrement différent mais cela doit dépendre des distributions) mais malgré plusieurs connexions et déconnexions il n'y a rien…
[^] # Re: ifup.d
Posté par cho7 (site web personnel) . Évalué à 1. Dernière modification le 02 mai 2018 à 09:23.
Bon après là c'est du debug classique hein
Arrives-tu à faire tourner ton script en standalone (sans passer par if-up.d) ?
Es-tu sûr que le script s'exécute ? Vérifie ses droits, notamment le droit x pour l'utilisateur qui va bien (ce ne sera pas ton utilisateur, mais probablement root) et qu'il est dans un dossier accessible (pas dans ton home directory en somme)
Dans le doute, ajoute un echo vers ton fichier, non conditionné, dès le début de ton script pour s'assurer qu'il est bien exécuté.
Ensuite ajoute un echo dans un bloc else, pour savoir si tu tombes dans l'embranchement "pas d'internet" pour une raison quelconque.
Bref, diagnostique le problème :-)
[^] # Re: ifup.d
Posté par lxtrem . Évalué à 1.
Oui oui, un echo au debut du fichier sans condition c'est ce que j'ai fait.
J'ai aussi donné les droits d'execution à tous les utilisateurs au cas ou.
Si j'éxecute le script à la main le comportement est bien celui attendu.
Et oui mon script est au bon endroit, donc je pense que le problème ne vient pas de la, je pense plutot que le comportement de ce dossier n'est pas celui que l'on recherche.
[^] # Re: ifup.d
Posté par NeoX . Évalué à 2.
ifup.d c'est quand l'interface physique s'active,
- le cable est branché en RJ45
- la carte wifi est activé (mode avion OFF)
tu peux simplement placer ton script ou tu veux et l'appeler depuis un fichier de configuration dans /etc/cron.d/
ou dans
crontab -e -u ton_user
qui dira de le lancer à 18h.et c'est ton script qui va regarder sur quel reseau il est (sur un portable, ca ne sert à rien de tenter de se connecter à ton RPi si tu n'es pas à ton domicile), et lancer le rsync uniquement dans ce cas là.
[^] # Re: ifup.d
Posté par lxtrem . Évalué à 1.
Peu m'importe le réseau sur lequel je suis, j'ai des redirections sur les ports 21 (ssh), 80, 443 (http/https) et 873 (rsync) donc je n'ai pas besoin d'être sur le même réseau.
Et oui mon script va regarder si il est connecté à un réseau mais la question est comment faire ?
Y a-t'il une autre solution que de faire avec ping et grep ?
# google (ou autre moteur de recherche) est ton ami
Posté par totof2000 . Évalué à 2.
https://www.debian-fr.org/t/etc-network-if-up-d-sous-wheezy/55772/8
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par lxtrem . Évalué à 1.
Je n'avais en effet pas vu ce topic (malgré des recherches), mais la solution n'est pas celle que je souhaite, mon script ne doit pas s’exécuter au démarrage d'une interface mais à une connexion à un réseau wifi (mon ordinateur n'ayant pas de port rj45).
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par totof2000 . Évalué à 2.
Dans ce cas si tu as des pistes je suis intéressé. Personnellement, si je devais le faire, j'irais voir comment les plugins de nos IHM vont détecter la présence d'une connection wifi.
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par totof2000 . Évalué à 2. Dernière modification le 02 mai 2018 à 18:07.
une piste à creuser :
https://superuser.com/questions/114099/add-a-hook-to-run-when-networkmanager-connects
manpage de NetworkManager :
https://www.systutorials.com/docs/linux/man/8-NetworkManager/
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par lxtrem . Évalué à 1.
Intéressant, j'irais creuser.
En attendant, j'utilise ce code :
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par lxtrem . Évalué à 1.
Intéressant, j'irais creuser.
En attendant, j'utilise ce code :
Qui me paraissait la solution la plus propre à ma disposition.
Je regarde votre lien mais je ne sais pas si il est valable car je dois effectuer ça une seule fois par jour a partir d'une heure donnée.
Merci quand même,
Raphael
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par totof2000 . Évalué à 2. Dernière modification le 02 mai 2018 à 23:20.
Je cite la demande initiale :
C'est à mon avis la façon la plus propre de répondre à ce problème. Maintenant, s'il y a besoin d'exécuter cette commande à une heure précise, il vaut mieux passer par cron. Celà dit, on peut envisager un script qui positionne un fichier témoin quand le réseau est up, et le supprime quand le réseau est down, et le script lancé par cron ne s'exécute que lorsque ce fichier est présent.
Maintenant je n'ai pas perdu mon temps car j'avais pensé à faire ça pour synchroniser le homedir de mon portable (homedir que j'ai malencontreusement perdu hier), et je n'avais pas pensé à NetworkManager, et c'est en répondant à ce post que j'y ai pensé, donc c'est moi qui te remercie.
[^] # Re: google (ou autre moteur de recherche) est ton ami
Posté par lxtrem . Évalué à 2.
Juste si ça vous intéresse, voici mon dernier script:
Il y a un cron qui remet le fichier avec un 0 dedans tous les jours a minuit et ce script est exécuté toutes les 10 minutes a partir de 18h.
Ainsi si l'ordi est éteint à 18h c'est bon et ca syncro qu'une seule fois par jour.
Le 2 dans executed.txt peut être remplacé par un fichier lock mais c'est dans l'idée.
Je pense qu'on peut clore le sujet car deux solutions ont été proposées pour des besoins différent, c'est parfait.
Merci à tous,
Raphael
# par le client dhcp
Posté par freem . Évalué à 2.
Sinon, il est aussi possible avec certains clients dhcp d'exécuter un script lorsque l'on reçoit un bail DHCP.
Du coup, en écrivant les scripts qui vont bien (qui doivent, entres autres, configurer le réseau correctement par contre), il devrait être possible d'identifier le réseau sur lequel on est (par exemple, en obtenant l'adresse MAC du serveur DHCP, en demandant au daemon wpa_supplicant, en vérifiant la présence d'un nom DNS connu, etc… avec tous les risque d'usurpation d'identité à prendre en compte, bien entendu, sauf si l'on sait que l'on a une machine spécifique sur laquelle on peut vérifier une identité par exemple SSH, je ne vois pas trop comment éviter ce problème de toute façon).
[^] # Re: par le client dhcp
Posté par lxtrem . Évalué à 1.
Merci, ça peut être intéressant.
De toute façon, comme dit lus haut, je n'ai pas besoin de vérifier l'identité du réseau car ma box est configurée pour rediriger les requêtes rsync vers mon RPi.
Malgré tout, je pense que cette solution c'est un peu se compliquer la vie, mais je me renseignerai.
[^] # Re: par le client dhcp
Posté par freem . Évalué à 2.
C'était juste pour mentionner cette possibilité, on ne sait jamais l'utilité que ça peut avoir, par exemple dans le cas ou quelqu'un n'utilise pas ifupdown (qui est, je crois, spécifique à Debian et ses filles, et n'est donc pas disponible sur des systèmes comme voidlinux, par exemple).
[^] # Re: par le client dhcp
Posté par kna . Évalué à 2.
Avec dhcpcd aussi (man dhcpcd-run-hooks)
# systemd
Posté par moi1392 . Évalué à 3.
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
As tu tenté un module (?) systemd ?
Tu as des cibles simple que tu peux mettre en dépendances qui ton module sera démarré/arrêté quand une de ces cibles deviens valide/invalide.
[^] # Re: systemd
Posté par lxtrem . Évalué à 1. Dernière modification le 03 mai 2018 à 16:59.
Bonjour,
Cette solution m’intéresse beaucoup mais je ne comprend pas, la commande
systemctl status network-online.target
Me renvoie systématiquement que le réseau est actif, par conséquent mon démon ne marche pas…
Aurais-je mal compris le fonctionnement de ce démon ?
# Avec network manager et dispatcher:
Posté par ranDom (site web personnel) . Évalué à 2.
Je fais exactement ça avec mon laptop. Quand je me connecte sur le wifi de la maison, je lance un borg backup sur mon raspberry.
Je suis sous Fedora, mais ça devrait fonctionner avec n'importe quel Os utilisant network-manager:
Dans /etc/NetworkManager/dispatcher.d , j'ai créé le fichier 99-backup.sh suivant:
La variable CONNECTION_ID contient le nom de la connexion active. IF et STATUS contiennent respectivement l'interface concernée et l'opération.
Mes 2 ¢
[^] # Re: Avec network manager et dispatcher:
Posté par lxtrem . Évalué à 1.
Merci pour ce script, je pourrais le simplifier vu que je peux synchroniser mes données de n'importe où.
Seulement, quand je place ce script dans le dossier indiqué, cela ne marche pas (j'ai bien sur adapté le code à mon réseau).
J'ai donc essayé de faire un appel sans condition a un simple - echo redirigé vers un fichier mais rien, même après un redémarrage du service…
J'ai comme l'impression que NetworkManager ne fonctionne pas normalement chez moi, c'est déjà la deuxième solution avec ce service qui ne marche pas, pourtant c'est bien lui qui gère le réseau car quand je le redémarre je perd la connexion…
Une idée ?
PS: J'ai déjà réinstallé NetworkManager mais étrangement, après une désinstallation en mode simulation, je n'avais plus l'icone en bas de mon bureau mais j'avais toujours accès à internet, peut être est-ce dû au fonctionnement du mode simulation.
[^] # Re: Avec network manager et dispatcher:
Posté par ranDom (site web personnel) . Évalué à 1.
Le script est bien exécutable ?
Que disent les logs, ( journalctl |grep nm-dispatcher )
[^] # Re: Avec network manager et dispatcher:
Posté par lxtrem . Évalué à 2.
Bonjour,
Après vérification des logs, il s'agissait bien d'un problème de permissions.
Pour ceux qui liront ce forum : attention, le fichier doit être propriété de root et surtout doit être en chmod 700, un chmod 777 ne marchera pas !
Au final voici mon script, nommé 99-backup.sh, placé dans /etc/NetworkManager/dispatcher.d/
Ici je n'ai pas fait de vérification du réseau car je peux le faire de n'importe ou mais il suffit de vous aider du script originel de @ranDom pour le faire.
Merci à tous, c'est un sujet résolu !
[^] # Re: Avec network manager et dispatcher:
Posté par totof2000 . Évalué à 2.
Merci à toi d'avoir posé la question, comme je l'ai dit, je cherchais à faire ça il y a quelques temps.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.