Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/09/2013, à 20:26

didoudek

[Résolu] Règle udev impossible rien ne fonctionne

bonjour à tous, je suis nouveau sur le forum et grand débutant en linux. J'espere que ma demande sera dans le bon sujet car je viens de passer des heures et des heures à lire les tutos pour savoir comment creer un script en bash ou le copier, les droits etc .... pour en arriver au final a me creer une regle udev afin de detecter l'insertion d'un disque dur externe usb qui me lance un script de copie mais malheureusement rien ne fonctionne je pêche un peu partout.
Si quelqu'un peut me donner des tuyaux pour avancer et maitriser tout cela ce serait vraiment super sympa alors voila ce que je fait :
je viens de creer un fichier nommé : 10-cle-usb.rules dans mon /etc/udev/rules.d/10-cle-usb.rules dans ce fichier j'ai mis;
SUBSYSTEM=="block", ACTION=="add", ATTRS{serial}=="YTAD1110191451036768",
SYMLINK="perifusb", RUN+="/home/libddc/bin/./teste.sh"
Mais lorsque j'insere mon disque usb j'ai bien mon lien symbolique qui se crée (perifusb) mais par contre je n'ai jamais aucune action qui se passe le RUN ne s'execute pas je ne comprends pas pourquoi.
mon ficher teste.sh :
#!/bin/bash
echo  "ok insere"
je l'ai rendu executable en faisant chmod +x /copie.sh et puis je ne sais plus quoi faire je m'arrache les cheveux, je ne sais pas si je bute sur udev ou sur le script ou les droits sur le script ......
merci d'avance pour vos eclaircissements

Dernière modification par didoudek (Le 27/09/2013, à 12:01)

Hors ligne

#2 Le 13/09/2013, à 00:35

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut,
Peut-être que ton script s'exécute mais il ne sait pas où afficher ce que tu lui demandes.
Mets ceci dans ton script :

#!/bin/bash
echo "ok insere" > /tmp/mon_log

Si ton script se lance, tu auras sous /tmp un fichier mon_log


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#3 Le 13/09/2013, à 15:29

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut et merci de t'interesser à mon probleme je pense que tu me seras d'un grand secours. Je viens d'essayer ce que tu me dis cependant marche pas non plus, j'ai donc décidé de laisser tomber les regles udev et me consacrer à la modif du fstab car je pense que pour ce que je veux faire ça suffira peut etre.
Je veux à l'insertion d'un disque dur USB qu'il me declenche une copie rm -r /media/usbdcp  /home/user/copieusb voila uniquement cela en sachant que mon DD sera different à chaque fois et que je l'utilise sur sdc1:
J'ai rajouté ceci dans fstab : /dev/sdc1    /media/usbdcp/        defaults,noauto,rw    0    1
par contre je ne sais pas comment démarrer la copie, j'ai essaye de faire un script mais meme probleme je ne sais pas ou le copier, les droits ...  et pourtant j'ai bien tout lu concernant les creations de script mais ou les tutos sont pas complets ou j'ai des erreurs...  je suis sous ubuntu 12.04
merci à toi si tu peux m'aider

Hors ligne

#4 Le 14/09/2013, à 16:32

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut,
Il ne me semble pas que l'on puisse faire exécuter quelque chose juste en ajoutant une ligne dans fstab. Après, peut-être que je me trompe.

J'ai testé en faisant ainsi :
Création du script /home/monuser/test.sh :

#!/bin/bash
echo "Clée insérée : $(date)" > /tmp/test.txt

Je l'ai rendu exécutable par :

$ chmod +x /home/monuser/test.sh
$ ls -l /home/monuser/test.sh
-rwxrwxr-x 1 monuser monuser 61 sept. 14 16:11 /home/monuser/test.sh

La rêgle udev dans le fichier /etc/udev/rules.d/99-usb.rules :

ACTION=="add", KERNEL=="sd?1", ATTRS{manufacturer}=="SanDisk", ATTRS{serial}=="20054256000C86E2BF3D", RUN+="/home/monuser/test.sh"

Lors de l'insertion de ma clé, je me retrouve avec le fichier /tmp/test.txt contenant :

Clée insérée : Sat Sep 14 16:16:25 CEST 2013

Par contre, la règle ne s'applique que pour une seule clé.
Pour ton cas, tu veux que ton script s'exécute dès qu'un disque est branché, peu-importe ce disque, à partir du moment que la partition est sdc1 ?
À ce moment, la règle udev doit être :

ACTION=="add", KERNEL=="sdc1", RUN+="/chemin/vers/script/script.sh"

Edit :

didoudek a écrit :

Je veux à l'insertion d'un disque dur USB qu'il me declenche une copie rm -r /media/usbdcp  /home/user/copieusb

Une copie ne se fait pas par rm -r ... ; là, tu vas supprimer les répertoires ! Pour copier, c'est la commande cp.

Dernière modification par Postmortem (Le 14/09/2013, à 16:38)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#5 Le 18/09/2013, à 14:51

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Bonjour à toi, désolé pour mon silence j'étais en déplacement.
Je tenais à te dire un grand merci car tu m'as fait énormément avancer maintenant effectivement le fichier test.txt est bien créé dans le rep /tmp
cependant maintenant comment puis je remplacer le echo par donc la copie de mon fichier ? car la clé est monté ou ? moi je faisais  : cp -r /home/monuser/*  /home/macopie
encore merci pour ton aide apres cela je pense que je serais ok ....
car a l'insertion de mon disque dans le port USB il me le monte automatiquement dans le rep /media seulement le nom qu'il lui donne je ne le connais pas et il change tout le temps.

Dernière modification par didoudek (Le 18/09/2013, à 14:56)

Hors ligne

#6 Le 18/09/2013, à 23:45

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Rebonsoir, je viens de tester une petite modif du script en effet apres le echo "clé inseree" j'ai rajouté à la ligne la commande : cp -R /media/* /home/monuser car je me suis apercu que toutes les insertions de clé usb se montaient dans /media. mon probleme est que à l'insertion de la clé le fichier test.txt est bien rafraichi (m'indique la date et l'heure de l'insertion) mais ma copie cp ne démarre jamais. j'ai essayé d'inserer un sleep 30 entre le echo et le cp mais rien n'y fait la copie ne demarre pas que puis je faire ? peut etre teste l'existence du rep /media/ s'il est vide ou pas ? ou alors tester la presence de sdc ?
merci à nouveau si tu peux me donner un tuyau pour finaliser

Hors ligne

#7 Le 19/09/2013, à 11:27

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut,
Il faut que ton script attende que le montage soit effectué.
Tu pourrais le faire en checkant le résultat de la commande mount.
Cette commande pourrait également te fournir le nom du point de montage qui risque d'être différent selon le média que tu branches.
Le souci, c'est que je ne sais pas comment récupérer de manière sûre le nom du point de montage (genre s'il contient des espaces ou autre). Il y a peut-être (certainement) une autre commande pour faire cela... Mais là, je ne peux tester, je ne suis pas sur Ubuntu.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 24/09/2013, à 14:14

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut, je comprends bien ce que tu me dis cependant je n'ai pas besoin de verifier le point de montage car mon disque usb se monte toujours dans /media et moi ca me va il faudrait juste que je puisse faire un script avec une boucle du genre : if /dev/sdc then cp -r /media/* /home/monuser/mescopies, seulement je ne sais pas comment mettre ce script en forme en bash ?
j'ai créé également un script contenant cette ligne de commande cp-r /media/* /home/monuser/mescopies dans un fichier bash ca marche impeccable mais il me demande toujours le pass pour permission comment lancer ce bash sans etre obligé de mettre un sudo qui me declenche la demande du mot de passe ?
merci à toi si tu peux encore m'aider....

Hors ligne

#9 Le 25/09/2013, à 11:10

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut,

Lorsque ton disque est branché, peux tu montrer le résultat des commandes suivantes :

mount | grep '/dev/sdc1'
ls -ld /media/*
ls -ld /media/*/*

C'est pour voir où est monté ton disque et les droits sur le montage. Chez moi, les disques USB sont montés sous /media/mon_user/label_ou_uuid_de_la_partition.

Sinon, les disques sont formatés comment ? FAT ? NTFS ? EXT2, 3 ou 4 ?


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#10 Le 25/09/2013, à 13:12

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Salut et encore merci de te pencher sur mon problème alors voila :
mount | grep '/dev/sdc1' --> /dev/sdc1 on /media/blue type fuseblk (rw,nosuid,nodev,allow_other,default_permissions, blksize=4096)

ls -ld /media/* --> drwx------1 libddc libddc 4096 sept. 4 12:47 /media/blue
ls -ld /media/*/* --> drwx------ 1 libddc libddc 8192 juil. 10 17:09 /media/blue/b1
                              drwx------ 1 libddc libddc 8192 aout 21 14:13 /media/blue/b2

voila et pour le formatage mes disques sont toujours en ext3 ou parfois ext4, si tu peux m'aider dans la rédactions du script maintenant sur le déclanchement de la règle dont tu m'as aidé ci-dessus. A la détection USB 'add' de ce disque je veux en copier l'intégralité dans mon rep /home/monuser/copie avec : cp -R
merci

Hors ligne

#11 Le 25/09/2013, à 15:53

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Pour le script, essaie ceci (je ne peux pas tester, pas d'accès à linux au moment où j'écris) :

#!/bin/bash
exec > /tmp/test.log 2>&1
id
date

Tu appelles ce script par la règle udev (ne pas oublier de le rendre exécutable).
Tu devrais avoir un fichier /tmp/test.log avec le nom du user qui lance le script et la date d'exécution.

Si le user est root, tu ne devrais pas avoir de soucis pour faire la copie, il faut juste attendre que le périphérique soit monté.
Le script appelé par la règle udev pourrait être alors :

#!/bin/bash
exec > /tmp/test.log 2>&1
date
nb=0
while [[ -z $(mount | grep '/dev/sdc1') ]]
do
   sleep 1
   (( nb=nb+1 ))
   (( nb == 10 )) && { echo "Périphérique non monté après 10 secondes... Sortie du script"; exit 1;}
done
echo "Périphérique monté, copie..."
cp -R /media/* /home/monuser/copie
(( $? != 0 )) && { echo "Erreur durant la copie !"; exit 1;}

Il faut que le répertoire /home/monuser/copie existe auparavant.
C'est basique comme script... Et si tu as un autre disque USB monté au moment de l'insertion sur /dev/sdc1, cela va te copier le contenu de sdc1 mais aussi ce qu'il y a sur tous les périphériques montés sous /media.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#12 Le 25/09/2013, à 17:23

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Hello, alors j'ai bien réécrit le script tel quel en revanche il se passe un truc bizarre c'est que dans le log il me mets a chaque fois peripherique non monté apres 10s, de plus effectivement sur l'automount a l'insertion du cable usb le disque ne monte plus de suite comme cela le faisait auparavant mais il le monte apres 10s ?? que peut il se passer ?

Hors ligne

#13 Le 26/09/2013, à 10:33

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

Oups ! J'avais zappé un truc ! C'est que udev ne passe à l'exécution des règles suivantes que lorsque le script est terminé. C'est certainement pour cela que le montage ne se fait qu'après l'exécution du script.

Ce qu'on pourrait essayer, c'est modifier dans la règle udev RUN+="/chemin/ton_script_de_copie.sh" par RUN+="/bin/bash -c 'nohup /chemin/ton_script_de_copie.sh &'"
Si cela ne fonctionne pas, il faut peut-être mettre le chemin complet pour nohup. Tu peux le trouver en faisant type nohup dans un terminal (ça doit être un truc du genre /bin/nohup ou /usr/bin/nohup).

Si cela ne fonctionne toujours pas, je viens de voir une autre solution sur le net.
Il faut créer un autre script (/chemin/lance_copie.sh par exemple ; ne pas oublier de le rendre exécutable) qui va appeler /chemin/ton_script_de_copie.sh comme ceci :

#!/bin/bash
echo "/chemin/ton_script_de_copie.sh" | at now

Il faut installer la commande at si tu ne l'as pas :

sudo apt-get install at

Et la règle udev contiendra alors : RUN+="/chemin/lance_copie.sh"

Je précise que je n'ai pas testé donc essaie peut-être tout cela avec un script que ne fait que des "echo"


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#14 Le 26/09/2013, à 20:42

didoudek

Re : [Résolu] Règle udev impossible rien ne fonctionne

Bonsoir, un grand merci à toi mon ami tu as trouvé la solution a mon problème, en effet la solution nohup fonctionne à merveille je ne connaissais pas cette commande. Heureusement qu'il y a des gens comme toi pour nous faire avancer car si tu ne t'étais pas penché sur mon problème je m'aperçois sur le forum que personne d'autre n'a essayé de me tuyauter mais bon l'essentiel c'est qu'il y en ait un ...
je ne trouve pas de statut 'discussion résolue'

Dernière modification par didoudek (Le 26/09/2013, à 20:42)

Hors ligne

#15 Le 27/09/2013, à 10:00

Postmortem

Re : [Résolu] Règle udev impossible rien ne fonctionne

De rien. Mais tu peux remercier tout le monde, c'est grâce à ce forum et la doc que j'ai mis le nez dans udev et que j'ai appris pas mal de trucs !
Pour passer en résolu, tu cliques sur "Modifier" sur le premier message, tu pourras ainsi changer le titre.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne