27
juillet 2012

Lancer un programme par udev

Pour externaliser mes sauvegardes je passe par un disque dur usb car j'ai trop de volume pour envoyer tout ça par Internet. J'en ai eu marre de lancer le programme à la main, c'est à ce moment qu'intervient udev et le paramètre RUN+=[...]

Je part du principe que vous savez créer une règle udev suivant votre périphérie mais je vous donne tout de même ma règle :

ATTRS{serial}=="2011012603C6", ACTION=="add", RUN+="/usr/bin/backupeur -U"

Au branchement du disque avec le numéro de série 2011012603C6, udev créé une action add et lance le programme /usr/bin/backupeur -U. Tout pourrait être simple mais udev s'exécute dans un espace particulier où il n'y pas de variables d'environnements, donc il faut adapter un peu le programme. Par exemple vous n'indiquez pas les chemins complets pour accéder aux programmes. Dans mon cas mon programme utilise which pour retrouver un programme :

RSYNCDIR=`which rsync`

En passant par udev which ne trouve pas les programmes car il utilise la variable d'environnement PATH mais c'est facile à contourner en ajoutant ça au début de votre programme :

# Dans le cas ou le script est lancé par udev
# Ajout de variables d'environnements
if [ $ACTION = "add" ]
then
        export PATH=/bin:/sbin:/usr/bin:/usr/sbin
fi

La variable $ACTION correspond à ACTION définit dans votre fichier de règle udev.

Administrateur système de métier mais surtout curieux de découvrir de nouvelles technos très orientées DIY. A mes heures perdues je fais de la photo avec toujours une petite envie d'intégrer des DIY sous forme de timelaps à base de raspberry.

Écrire un commentaire

Quelle est la première lettre du mot oqsuds ? :

Lancer un programme par udev - Philippe Maladjian - Péripéties bucoliques d'un administrateur systèmes au royaume de la virtualisation, du stockage et accessoirement photographe à ses heures perdues