#1 Le 26/06/2013, à 13:31
- Arbiel
Lancer un script à l'occurence d'un événement
Bonjour à tous
Je voudrais pouvoir lancer un script lorsqu'un utilisateur supprime un lanceur présent sur son bureau, ou d'une manière plus générale, recevoir l'information que l'utilisateur a demandé la suppression d'un lanceur et agir en conséquence.
Le lanceur en question est créé par une procédure que j'ai écrite, et qui créé également d'autres répertoires et fichiers qu'il s'agit de supprimer. Je maîtrise parfaitement les paramètres de ce lanceur.
Eventuellement, je peux interdire la suppression directe du lanceur (si cela est possible par le biais des droits d'accès), et créer sur le bureau un lanceur permettant de supprimer le lanceur en question et tous les répertoires et fichiers qui lui sont logiquement liés, en y glissant le lanceur à supprimer. Cependant, je ne veux pas que ces actions nécessitent la saisie du mot de passe utilisateur (ne pas passer par sudo).
Merci d'avance à qui voudra bien m'indiquer comment je peux résoudre ce problème, si possible en bash car je ne connais pas d'autre langage.
Arbiel
Dernière modification par Arbiel (Le 27/06/2013, à 09:10)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 27/06/2013, à 13:18
- rquennec
Re : Lancer un script à l'occurence d'un événement
Bonjour,
Tu peux utiliser incron et inotify.
Incron fonctionne de la même manière que cron sauf qu'il permet de déclencher des actions en fonction des évènements du système de fichiers.
Très pratique pour surveiller des fichiers et lancer des actions en fonction (création, ouverture, modification, suppression)
Ronan
Dernière modification par rquennec (Le 27/06/2013, à 13:19)
Proxmox pve-manager/3.4-11/6502936f (running kernel: 2.6.32-40-pve)
Debian 7.9
Ubuntu 10.04.4 LTS / 12.04.5 LTS / 14.04.3 LTS
CentOS release 5.11 (Final)
Hors ligne
#3 Le 27/06/2013, à 14:53
- Arbiel
Re : Lancer un script à l'occurence d'un événement
Bonjour
Je te remercie, car cela incron semble effectivement correspondre à ce que je cherche. Je viens de l'installer. Il ne me reste plus qu'à apprendre à l'utiliser.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 27/06/2013, à 21:50
- rquennec
Re : Lancer un script à l'occurence d'un événement
Bonsoir,
La commande n'est pas très compliquée.
incrontab -e permet de créer une règle incron.
incrontab -l permet de lister les règles créées.
pour utiliser incrontab, il faut indiquer le user autorisé à l'utiliser dans le fichier /etc/incron.allow
il faut indiquer au minimum 3 paramètres qui sont :
1 - le répertoire ou le fichier à surveiller
2 - le ou les évènements effectués sur le fichier/dossier à surveiller
3 - la commande ou le script à exécuter
les évènements étant (man 5 incrontab):
IN_ACCESS File was accessed (read) (*)
IN_ATTRIB Metadata changed (permissions, timestamps, extended
attributes, etc.) (*)
IN_CLOSE_WRITE File opened for writing was closed (*)
IN_CLOSE_NOWRITE File not opened for writing was closed (*)
IN_CREATE File/directory created in watched directory (*)
IN_DELETE File/directory deleted from watched directory (*)
IN_DELETE_SELF Watched file/directory was itself deleted
IN_MODIFY File was modified (*)
IN_MOVE_SELF Watched file/directory was itself moved
IN_MOVED_FROM File moved out of watched directory (*)
IN_MOVED_TO File moved into watched directory (*)
IN_OPEN File was opened (*)
il y a également des caractères génériques qui permettent de transmettre des infos au script à exécuter :
$$ signe dollar
$@ nom du fichier/dossier surveillé
$# évènement effectué sur le fichier/dossier
le plus dur à bien paramétrer est l'évènement, mais pour cela il existe la commande inotifywait qui permet d'afficher tous les évènements en cours d'exécution sur un fichier/dossier.
pour l'exemple, je vais surveiller le dossier /tmp et voir ce qu'il se passe quand je créé, modifie et supprime un fichier :
# cd /tmp
# inotifywait -m ./
dans une autre console,, je crée un fichier test dans le dossier /tmp
# touch /tmp/test
la commande inotifywait affiche :
./ OPEN,ISDIR
./ CLOSE_NOWRITE,CLOSE,ISDIR
./ CREATE test
./ OPEN test
./ ATTRIB test
./ CLOSE_WRITE,CLOSE test
Je modifie ensuite le fichier
# echo "coucou" >> /tmp/test
la commande inotifywait affiche :
./ OPEN test
./ MODIFY test
./ CLOSE_WRITE,CLOSE test
pour terminer, je supprime le fichier
# rm /tmp/test
la commande inotifywait affiche :
./ DELETE test
donc, si je veux exécuter une action après la création et/ou la modification d'un fichier, il faut utiliser l'évènement inotify CLOSE_WRITE,CLOSE qui correspond donc à l'évènement incron IN_CLOSE_WRITE
ce qui donne dans la table incron :
/tmp IN_CLOSE_WRITE /mon_script_a_executer $@ $#
(je passe en paramètre au script les caractères $@ et $# afin de pouvoir effectuer des traitements particuliers en fonction du nom du fichier et de l'évènement. ça peut toujours être utile)
et pour surveiller la suppression d'un fichier il faut utiliser l'évènement inotify DELETE qui correspond à l'évènement incron IN_DELETE
ce qui donne dans la table incron :
/tmp IN_DELETE /mon_script_a_executer $@ $#
les évènements peuvent être cumulés :
/tmp IN_CLOSE_WRITE,IN_DELETE /mon_script_a_executer $@ $#
de cette manière, un seul script peut être utilisé pour gérer différents évènements effectués sur un fichier.
Si ça peut être utile
Ronan
Proxmox pve-manager/3.4-11/6502936f (running kernel: 2.6.32-40-pve)
Debian 7.9
Ubuntu 10.04.4 LTS / 12.04.5 LTS / 14.04.3 LTS
CentOS release 5.11 (Final)
Hors ligne
#5 Le 27/06/2013, à 22:58
- Arbiel
Re : Lancer un script à l'occurence d'un événement
Merci beaucoup pour ce complément d'information.
J'ai installé les paquets nécessaires, et j'ai essayé, comme tu me le montres, de surveiller les activités sur /tmp. Or, il se trouve que j'ai monté tmpfs sur /tmp, et cela doit être la raison pour laquelle j'ai reçu un flot ininterrompu de notifications d'événements.
Je continuerai mes tests plus tard, et je te tiendrai informé de l'avancement de ma prise de connaissance du sujet, et te poserai peut-être des questions complémentaires.
Bonsoir et merci encore
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#6 Le 29/06/2013, à 00:01
- Arbiel
Re : Lancer un script à l'occurence d'un événement
Bonsoir Ronan
J'ai à peu près compris ce qu'il faut faire. J'ai compris comment utiliser les diverses commandes inotifywait, incrontab -l et incrontab -e.
J'ai crée une table avec
env EDITOR=gedit incrontab -e
dans laquelle j'ai inscrit la ligne
/home/arbiel/Bureau IN_ALL_EVENTS /.ciel/scripts/surveille.sh $@ $# $% $&
surveille.sh ne fait qu'une chose
zenity --text=xxxxxx
et je l'ai testé séparément.
Mais, lorsque je fais quoi que ce soit sur le bureau, aucun message n'est affiché par zenity. Je reçois bien l'envoi les notifications d'événement sur le terminal où j'ai passé la commande inotifywait, mais rien du tout si je ferme ce terminal.
Quelle étape ai-je oubliée ?
D'avance merci pour ton aide.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#7 Le 29/06/2013, à 11:51
- Arbiel
Re : Lancer un script à l'occurence d'un événement
Je viens de constater que c'est le message de zenity qui n'est pas présenté à l'écran. Le mécanisme fonctionne bien.
Je vais maintenant chercher comment faire pour que le script sache afficher un message à l'écran, car je pense en avoir besoin.
Encore merci pour tes explications
En fait, cela ne marche pas tout à fait : en supprimant un fichier que je surveille, ou en le mettant à poubelle, les événements IN_MOVE_SELF et IN_DELETE_SELF que je vois apparaître en réponse à inotifywait ne semblent pas appeler le script (au lieu d'afficher un message, le script ajoute à un fichier une ligne qui contient les valeurs de $@ $# et $& et $%)
Arbiel
Dernière modification par Arbiel (Le 29/06/2013, à 16:59)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#8 Le 30/06/2013, à 07:56
- rquennec
Re : Lancer un script à l'occurence d'un événement
Bonjour,
Tu as peut être une anomalie dans ton script.
Je vais regarder de mon coté.
Ronan
Proxmox pve-manager/3.4-11/6502936f (running kernel: 2.6.32-40-pve)
Debian 7.9
Ubuntu 10.04.4 LTS / 12.04.5 LTS / 14.04.3 LTS
CentOS release 5.11 (Final)
Hors ligne