Exécuter une commande lorsqu'un périphérique est connecté via USB

3

J'ai actuellement un système qui sauvegarde mon serveur Linux sur un périphérique de stockage USB /media/usb. Tout cela fonctionne correctement. Cependant, j’ai en fait deux disques que nous essayons d’échanger quotidiennement.

Existe-t-il une possibilité de connexion lorsqu'un périphérique USB est branché et un moyen d'utiliser sendmailou quelque chose de similaire pour envoyer un courrier électronique à l'administrateur si le lecteur n'a pas été échangé depuis plus de 3 jours, par exemple?

Schodemeiss
la source
Je ne sais pas si cette question est hors sujet ou non, mais vous pourriez peut-être essayer de demander à SuperUser ?

Réponses:

7

Vous pouvez analyser / var / log / messages, mais pas moi.

J'écrirais une règle udev qui exécutait un script lorsque vous connectez / déconnectez le périphérique. Il y a plus d'informations à ce sujet ici

J'ai copié les points saillants au cas où ce site serait en panne:

Les fichiers de règles sont stockés dans le /etc/udev/rules.d/répertoire.

Le fichier README contient des conseils sur la manière de nommer les fichiers de règles:

Les fichiers doivent être nommés xx-descriptive-name.rules, le xx devant être choisi en premier en fonction des points de séquence suivants:

<60 règles les plus utilisateur; si vous souhaitez empêcher une affectation d'être remplacée par des règles par défaut, utilisez l'opérateur: =.

ceux-ci ne peuvent pas accéder aux informations persistantes telles que celle de vol_id

<70 règles qui exécutent des aides telles que vol_id pour renseigner la base de données udev

<90 règles qui exécutent d'autres programmes (en utilisant souvent des informations dans la base de données udev)

= 90 règles à exécuter en dernier

La première partie d'une règle udev est constituée par les clés correspondantes. Nous utiliserons l'entrée KERNEL à partir du sommet de la chaîne, ainsi que les attributs idVendor, idProduct et serial des informations spécifiques à l'appareil. Cela identifiera positivement cette clé USB et ignorera toutes les autres. L'argument du noyau utilise un point d'interrogation comme un caractère générique. Ainsi, si notre lecteur était monté sur un autre nœud (par exemple, sda1, sdb1, sdc1, etc.), il pouvait toujours être identifié.

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00",
ATTRS{serial}=="50E6920B000AE8" 

Maintenant que nous avons les clés nécessaires pour identifier le matériel particulier que nous recherchons, nous pouvons ajouter des arguments d’affectation. Dans notre cas, nous en avons ajouté deux. Le premier crée un lien symbolique vers ce périphérique dans le répertoire / dev /. La seconde exécute un script dans notre répertoire personnel:

SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

Voici la règle finale assemblée en une seule ligne:

KERNEL=="sd?1", ATTRS{idVendor}=="13fe", ATTRS{idProduct}=="1f00", ATTRS{serial}=="50E6920B000AE8", SYMLINK+="hackaday", RUN+="/home/mike/notify-plugin.sh 'HackaDay Thumbdrive:' 'Connected as: $KERNEL'" 

Nous avons ajouté cela en tant que seule ligne de notre fichier de règles, puis avons redémarré udev à l'aide des commandes suivantes:

sudo nano /etc/udev/rules.d/81-thumbdrive.rules 
sudo /etc/init.d/udev restart
Tom O'Connor
la source
1
Merci! J'ai couru avec ça et ça marche à merveille. Je viens d'utiliser UDEV pour stocker l'heure à laquelle le lecteur a été échangé et dans mon script de sauvegarde, il vérifie ce fichier et les ping et off et envoie un e-mail s'il ne correspond pas à mes critères!
Schodemeiss
Cela aurait-il du sens d’obtenir d’une manière ou d’une autre les événements udev et de les connecter à journald?
CMCDragonkai
1

Oui, chaque fois que vous branchez ou déconnectez un périphérique USB, un message est écrit dans le fichier / var / log / messages. Vous pouvez facilement vérifier ceux-ci en utilisant la commande dmesg. Il ne serait pas totalement déraisonnable d’interroger ce fichier toutes les (x) unités de temps pour vérifier les messages de connexion / déconnexion et agir en conséquence.


la source