télémaintenance sur ce process lancé au démarrage

Ici vous trouverez comment modifier les fichiers de configuration, mais aussi, pourquoi pas des applis comme apache, vsftp, samba et autres...

Modérateur : Francois

destroyedlolo
Raspinaute
Messages : 1583
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: télémaintenance sur ce process lancé au démarrage

Message par destroyedlolo » lun. 2 sept. 2019 22:45

Salut,

qu'il soit lancé par cron, rc.local, /etc/init.d ou encore par les startups du D.E. ... là n'est pas le problème et ca ne va pas changer grand chose pour une utilisation aussi simple.
Par contre, pour interagir avec un tel programme, comme je le disais, le plus simple est de passer par la commande screen qui a été faite pour ça.

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: télémaintenance sur ce process lancé au démarrage

Message par Bud Spencer » mar. 3 sept. 2019 16:50

Artemus24 a écrit :
lun. 2 sept. 2019 21:30
Fred26100 a bien spécifié au début de son premier message :
Fred26100 a écrit :Tout d'abord Je ne suis pas un pro de bash / unix
Bien sûr. Si c’était un pro, il ne poserait pas la question, il y répondrait.
Artemus24 a écrit :
lun. 2 sept. 2019 21:30
Et si sa demande concerne d'interagir au clavier, je ne vois que la création d'un service.
Parce que tu n’as pas pris en compte la réponse que j’ai donnée plus haut ou je cite la méthode normalement utilisée (par les pros, mais pas que) pour faire ce genre de chose. Ce qui ne veut pas dire que c’est très compliqué et il n’y a pas nécessairement besoin de faire un ‘vrai’ service pour ça. Par contre le jour où on veut faire un vrai service, là ça devient impératif, donc autant commencer par utiliser les bonnes méthodes, ce sera toujours ça d’appris.
Artemus24 a écrit :
lun. 2 sept. 2019 21:30
Or il me semble que cela sort de son domaine de compétence.
Justement, mais si a chaque fois que quelqu’un pose une question on lui répond que ce n‘est pas possible ou qu’on le dirige vers des ‘combines’ qui vont a l'encontre de ce qu'il faudrait faire, il n’aura jamais le niveau de rien et restera un débutant toute sa vie. C’est d’ailleurs comme ça que l’on se retrouve avec des tas de gens qui sont cloisonnés dans leurs limites de compétences et qui finissent par être persuadé qu’il n’y pas d’autre solution que celle qu’ils proposent. Ma vision des choses est complétement différente. Je ne réponds pas à un débutant pour qu’il arrive ses fins en se limitant a ce qu’il sait faire, je le fais pour le motiver à apprendre comment il doit faire. En ce qui concerne les méthodes de programmations, je pense pouvoir affirmer que j’ai ‘offert’ ici plus de code et d’exemples que n’importe qui d’autre et j’ai toujours données des explications détaillées à chaque fois que l’on me l’a demandé (j'ai en tous cas essayé). Alors par pitié, arrêtez de me dire que ce que je propose est trop compliqué. Après, chacun est bien libre de plafonner dans ses limites s’il le veut et si le po n’a pas la volonté d’apprendre, je ne peux rien faire pour lui mais cela aura au moins le mérite d’être écrit et cela pourra servir à d’autres.
Artemus24 a écrit :
lun. 2 sept. 2019 21:30
Bud Spencer a écrit :Il ne faut pas confondre ‘logger un processus’ et ‘Interagir avec un processus’.
J'ai du mal à te suivre. Peux-tu détailler un peu plus le fond de ta pensée, svp ?
Bien sur.
Logguer:
Tu rediriges tes sorties vers un fichier, très bien. Ton programme va donc écrire un ‘log’ de ce que tu as décidé de lui faire logger (données, évènement, erreur …). Même si tu affiches les données du fichier, aucune action n’est dépendante de ce que le programme écrit, et ce qui est écrit dans le fichier n'a aucune incidence sur le programme, il n’y a donc pas d’interaction.

Interagir:
C’est un échange. Tu demandes quelques choses au processus et il te répond, ou tu lui donne un ordre et il l’exécute. Ça peut aussi être l’inverse. Le processus te demander quelques chose (saisie d’une valeur au clavier, appuis sur une touche …) et tu t’exécutes. Ça peut aussi être bilatérale. Le processus de demande de saisir un nombre de 1 à 10, tu saisie 11 et il te répond que tu es hors limite. C’est ça de l’interaction.

Si c’était juste une tache qui dure longtemps avant de te demander ton avis (ou pas) et que tu veuilles continuer de profiter de ta console pour faire d’autres chose, ce serait diffèrent. Tu pourrais soit utiliser un multiplexeur de terminal (les plus courrant sous linux sont screen et tmux) ou simplement détacher le processus de la console provisoirement et le rattacher plus tard par de simple commande unix. Par contre ici, on parle d’un processus qui s’exécute ‘en tant que service’ (quel que soit la méthode de démarrage) et pour ça les règles minimums de bonnes pratiques (avant même d’apprendre à développer de vrais services) sont que ce processus ne doit en aucun pouvoir devenir dépendant d’une session quelle qu’elle soit et encore moins qu’il puisse rendre la main dans une session pour recevoir des commandes (et comment qu’on fait pour passer des commandes a un processus qui n’a pas le droit de rendre la main ? :? ;) ).


Comme je suis pas radin, je vais déjà faire un complément en ce qui concerne la redirection dans un fichier, parce que si vous vous contentez de print() dans des script python sans adapter le programme, vous n’aurez jamais toutes vos lignes de ‘log’

Petit programme tout simple :

Code : Tout sélectionner

import time
while(True):
	print(time.time())
	time.sleep(1)
Si tu le lances simplement en console (python test.py), il va t’afficher time toutes le seconde.

Maintenant exécute le avec une commande pour le passer en background et avec une redirection ( python test.py > test.txt &). Au démarrage, le programme créer bien le fichier test.txt. Laisse tourner le programme une dizaine de secondes et regarde le contenu du fichier txt. Tu verras qu’il est vide, pourtant le programme tourne bien. Si en revanche tu laisses laisse-le tourner 10 minutes et que tu réouvre ton fichier tu auras des d’entrées d’écrites, mais pas toutes. L’explication est que les sorties ne sont écrites dans le fichier que quand le buffer est plein (j’avais déjà expliqué ça et en avait déjà fait la démonstration dans un autre sujet).

Pas problème, on peut résoudre ça très simplement en modifiant le code pour qu'il vide le buffer à chaque écriture :

Code : Tout sélectionner

import time
import sys
while(True):
	print(time.time())
	time.sleep(1)
	sys.stdout.flush()
Et si on veut suivre toutes les sorties en temps réel depuis une autre console (ou en ssh avec putty par exemple ...), il n’y a besoin de rien d’autre qu’une simple commande tail pour lire le fichier en séquentiel :tail -f test.txt

Maintenant, le programme écrit chaque ligne dans le fichier et on l’a instantanément en visu sur la console de la commande tail.

Le problème, c’est que ça ne répond pas la question. Il n’y a aucune interaction là-dedans. On ne fait que logger les sorties dans un fichier et les afficher.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: télémaintenance sur ce process lancé au démarrage

Message par Artemus24 » mar. 3 sept. 2019 20:37

Salut Bud Spencer.
Bud Spender a écrit :Parce que tu n’as pas pris en compte la réponse que j’ai donnée plus haut ou je cite la méthode normalement utilisée (par les pros, mais pas que) pour faire ce genre de chose.
Je suppose qu'il s'agit de ceci :
Bud Spencer a écrit :La plus élégante et la bonne pratique est de rediriger les entrées et sorties sur une liaison ipc (socket, named pipe …).
Cette solution est quand même difficile à mettre en oeuvre pour un débutant, non ?
Bud Spender a écrit :Ma vision des choses est complètement différente.
Et je t'en félicite, c'est à mon avis un peu trop compliqué à mettre en oeuvre pour Fred26100.
Bud Spender a écrit :Alors par pitié, arrêtez de me dire que ce que je propose est trop compliqué.
Que veux-tu que je dise d'autre ?
C'est quand même de la programmation système et ce n'est pas à la porté de tout le monde.

Je ne crois pas que cela soit bon pour Fred26100, que tu lui mâches le travail dont il est demandeur.
Et à la moindre difficulté, il va te sollicité et un jour, il ne va pas comprendre pourquoi tu vas lui refuser cette aide.

J'ai le même problème dans le forum developper / mysql.
J'ai tendance à fournir le travail demandé au lieu de les diriger vers la solution pas à pas.
On me fait fréquemment le reproche, surtout quand ce sont des étudiants qui demandent de l'aide.

La question est de savoir s'il a la volonté d'apprendre et s'il est demandeur d'une aide pour ses problèmes.
Comme tu le sais, il y a beaucoup de nouveaux membres dans ce forum, qui restent le temps de la résolution de leur problème et après, nous ne les revoyons plus jamais.
Bud Spender a écrit :logger un processus
Je n'ai pas compris le sens du mot "logger". J'ai compris faire un "login" sur un processus, c'est-à-dire faire une connexion, d'où mon incompréhension.
Bud Spender a écrit :Tu pourrais soit utiliser un multiplexeur de terminal (les plus courants sous linux sont screen et tmux)
C'est la même réponse que destroyedlolo, quand il parle de la commande screen. Je n'ai jamais utilisé ces commandes.
Bud Spender a écrit :ou simplement détacher le processus de la console provisoirement et le rattacher plus tard par de simple commande unix.
Là aussi, je ne sais pas faire.
Bud Spender a écrit :et comment qu’on fait pour passer des commandes a un processus qui n’a pas le droit de rendre la main ? :? ;
Cela dépasse mes compétences.
Bud Spender a écrit :Si en revanche tu laisses laisse-le tourner 10 minutes et que tu rouvres ton fichier tu auras des d’entrées d’écrites, mais pas toutes. L’explication est que les sorties ne sont écrites dans le fichier que quand le buffer est plein (j’avais déjà expliqué ça et en avait déjà fait la démonstration dans un autre sujet).
Ca, je sais faire en 'C/C++' : "fflush(stdout)".
Bud Spender a écrit :il n’y a besoin de rien d’autre qu’une simple commande tail pour lire le fichier en séquentiel :tail -f test.txt
Ca aussi je connaissais.
Bud Spender a écrit :Le problème, c’est que ça ne répond pas la question.
Justement, je ne sais pas interagir avec un processus, en dehors d'un service.

En tout cas, merci pour tes explications, cela me permet de faire une mise à niveau.

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: télémaintenance sur ce process lancé au démarrage

Message par Bud Spencer » mer. 4 sept. 2019 13:13

Je suis bien d’accord avec toi Artemus, tout ça n’est pas aussi simple que ça en a l’air, mais ce qui rend les choses compliqués, ce ne sont pas les méthodes proposées mais le besoin exprimé dans la demande.

Que répondre à ce genre de demande ?
Réponse 0 : ne pas répondre
Réponse 1 : ce n’est pas possible
Réponse 2 : laisse tomber tu ne sauras pas faire
Réponse 3 : répondre à coté
Réponse 4 : proposer une méthode qui couvre la complexité de la demande

Dans le cas présent, pour moi c’est réponse 4 parce que c’est tout à fait possible et qu’il existe des moyens pour ça. Je ne me pose pas la question de savoir si le po saura faire ou pas. Il ne m’appartient pas de juger de sa capacité à apprendre. Si je mettais ça en doute, ce serait direct réponse 0.

Sur ce genre de sujet, il faut, avant de répondre, bien prendre la mesure de la complexité du problème. Interagir avec un processus qui tourne en tant que service ne se résoudra pas avec des if else qui tournent en while dans un batch ou un script python. Bien sûr que cela dépasse le niveau d’un débutant, mais ce n’est pas moi qui expose les données du problème, c’est lui.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: télémaintenance sur ce process lancé au démarrage

Message par Artemus24 » mer. 4 sept. 2019 18:47

Salut Bud Spencer.

Je ne suis pas contre le fait de proposer une méthode répondant à la problématique de Fred26100.
Mais il faudrait déjà connaitre ce qu'il cherche à faire.
Là, il ne donne aucune explication, juste, je voudrais réagir à un processus écrit en python, qui tourne sur ma raspberry.

Tu vas t'investir pour réaliser cette demande, mais vu le temps que tu vas y passer, je me demande si au final, Fred26100 ne va rien y comprendre et mettre cela à la poubelle.
Je prends comme exemple où j'ai passé plusieurs heures à répondre à un problème concernant mysql, en détaillant la solution, pour entendre dire que c'est trop complexe et ne pouvait la mettre en oeuvre parce que l'internaute ne sait même pas installer une procédure stockée dans le serveur mysql, voire même modifier une base de données.
Et ce n'est pas la première fois que cela m'arrive.
J'ai aussi rencontré des demandes où le sujet était trop simple et au final, la dernière demande n'avait plus rien à voir avec la demande d'origine.
En gros, une question basique est posée, que l'on argumente par des exemples et au final, il faut écrire une application avec un manque flagrant de compétence pour sa compréhension.

Le problème concerne le niveau de faisabilité des internautes qui pensent que l'informatique n'est que du copier/coller.
Voire même, que ce n'est pas de leur ressort de s'investir dans un apprentissage, ou dans une recherche pour résoudre un problème.

Autant, je suis preneur de ce que tu dis parce que cela m'intéresse, autant je ne suis pas convaincu que les interventions de certains ne sont pas une perte de temps.
La preuve, je suis encore dans ce forum depuis le premier jour où je me suis inscrit !

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

cbalo

Re: télémaintenance sur ce process lancé au démarrage

Message par cbalo » jeu. 5 sept. 2019 12:47

Bonjour, je crois comprendre là ou tu veux en venir : tu dis :
tu dis
pour des raison de maintenance je voudrais voir ce qu'il affiche (avec Putty en SSH) et intéragir avec lui au clavier.
Pas possible en fonctionnement normal (service) comme plusieurs te l'ont expliqué mais il y a une option que j'utilise souvent :
Dans j'ai un service et que je veux soit debugger quelque chose, soit développer une nouvelle fonction et effectuer des tests, je fais la chose suivante :
Comme mes services sont en fait des programmes qui tournent dans une boucle while true (avec un try except quand même dedans) :
1) j'éteins mon service avec systemctl
2) je fais mes modifis et je le lance à la main le programme ==> du coup, je peux voir ce qui s'affiche à l'écran (s'il y a des print) et j'utilise CRTL+C pour l'arrêter
J'utilise souvent une variable que je nomme Debug, si elle vaut true, j'ai plein de print qui sont exécutés (mode test), avec False, il n'en reste que très peu (c'est le mode normal : fonctionnement en service)
Par contre, cette solution ne donne pas d'interaction avec le clavier par exemple.
Si je veux intéragir en mode test, utiliser le clavier a pour but de changer une valeur non ?
Et bien pour ça : je modifie mon programme en forçant une valeur (comme si j'avais fait une saisi) et je le relance pour voir ce qui se passe.

Autre option : si ton programme lit des données dans un fichier de configuration, tu peux aussi changer les valeurs dans ce fichier pour tester.

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: télémaintenance sur ce process lancé au démarrage

Message par Bud Spencer » jeu. 5 sept. 2019 16:33

Salut Artemus (j’ai lu que le pseudo fait allusion aux ‘mystères de l’ouest’, j’étais autrefois moi aussi un fan de cette série 😉 )

Tu sais, si à chaque fois tu te poses la question de savoir si le po va comprendre ou utiliser ce que tu lui prodigues, tu n’écris plus rien. En ce qui me concerne, les informations et exemples que je donne sont autant à destination du sujet lui-même que du po. Je ne considère pas les codes d’exemples que j’écris comme des investissements en temps. Je fais ça par simple distraction comme d’autres feraient des mots croisés et si en plus ça peut aider, c‘est parfait. Ce que je constate sans aucune prétention, c’est que les sujets ou je propose du code sont parmi les plus populaires, ce qui me laisse logiquement à penser qu’il y a une vraie attente pour ça.
Artemus24 a écrit :
mer. 4 sept. 2019 18:47
Le problème concerne le niveau de faisabilité des internautes qui pensent que l'informatique n'est que du copier/coller. Voire même, que ce n'est pas de leur ressort de s'investir dans un apprentissage, ou dans une recherche pour résoudre un problème.
Ma philosophie sur la question est très ‘Yodasienne’ :
- Tu veux le faire ? fais-le (actif)
- Tu ne sais pas le faire ? : apprend le (déterminé)
- Tu ne veux pas l’apprendre ? : ne le fait pas (ignorant)

Après il y aussi la philosophie des forums (pas seulement ici). Même si tu as plus de 30 ans de métier et que tu fais ça tous les jours par passion et pour nourrir ta famille et payer les traites de ta maison, tu auras toujours des amateurs qui pensent tout savoir et qui te soutiendront le contraire. Parfois, ça m’agace, d’autre fois ca me fâche (heureusement les modos veillent au grain 😉 ) et puis finalement tu te dis ‘tant pis pour eux s’il ne veulent pas apprendre’ et comme le dit le proverbe ‘on ne saurait faire boire un âne qui n’a pas soif’

Pour en revenir au sujet voici la page de la doc python qui fournit des infos pour la mise en œuvre d’IPC et de RPC avec ce langage. Bon ça reste du python et on se rend bien compte que comme je l’avais précisé dès le départ, python n’est pas vraiment pratique pour ce genre de chose, mais il y a déjà très largement de quoi couvrir l’intégralité de la demande du po.

https://docs.python.org/fr/3/library/ipc.html

Et pour ceux qui ne le savent pas :

IPC : Inter-Process Communication : permet de disposer d’interaction entre différents processus (qui peuvent être des services ou pas) qui partage le même espace mémoire (sur une même machine).

RPC : Remote Processus Call : permet de disposer d’interaction entre différents processus (qui peuvent être des services ou pas) qui ne partage pas obligatoirement le même espace mémoire (sur des machine distinctes). En fait RPC, c’est de l’IPC en réseaux.

Une liaison RPC est bien évidement moins performante qu'une liaison IPC, mais à aujourd'hui ou tout est connecté et ou l'on à tendance a de plus en plus dispatcher tout un tas de service et de processus un peu partout, c'est souvent ce choix qui est retenu.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

domos
Messages : 75
Enregistré le : lun. 9 mars 2015 19:17

Re: télémaintenance sur ce process lancé au démarrage

Message par domos » ven. 6 sept. 2019 13:41

Bonjour,

Pourtant avec Python on peut plein de chose assez facilement pour un débutant.

Puisque le Pi n'est accessible uniquement qu'en ssh.
On peut intéger au programme une simple interface web avec le module flask pour aussi bien consulter un fichier de log du programme ou lancer des actions.
https://deptinfo-ensip.univ-poitiers.fr ... mple_flask
Ca demande de faire un peu de html pour les templates mais c'est à la portée de tous les bidouilleurs "motivés"

Il suffit uniquement d'un navigateur pour intervenir sur son programme.

Tout dépend bien sur du fonctionnement du programme et du besoin

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: télémaintenance sur ce process lancé au démarrage

Message par Artemus24 » ven. 6 sept. 2019 16:20

Salut à tous.
Bud Spencer a écrit :j’ai lu que le pseudo fait allusion aux ‘mystères de l’ouest’, j’étais autrefois moi aussi un fan de cette série ??
C'est plus le jeu d'acteur d'Artemus Gordon qui m'a plus dans la série.
Une fois, il incarne un vieux marin, une autre fois, un poivrot, un général, une courtisane, ... Alors que James West est toujours le même.
Et je ne parle pas du docteur Miguelito Loveless, le nain diabolique dont j'ai aussi une grand sympathie.

C'est cbalo qui a déterré un sujet sans réponse, dont le message de "Fred26100" date du "sam. 9 avr. 2016 18:55".
Et la dernière visite de "Fred26100", dans le forum, date du "jeu. 28 avr. 2016 10:18".

Je ne me pose pas autant de questions que cela. Je le constate par leurs réactions.
Dans un premier temps, j'aide les personnes qui demandent de l'aide.
Même si je constate un problème, et qu'ils ne réclament aucune aide, je n'interviens pas.
Ce sont par les échanges que l'on voit à qui nous nous adressons.

Il y a ceux qui sont là pour faire faire le travail par quelqu'un d'autre.
Leur philosophie se résume à faire du copier/coller sans comprendre en quoi consiste la solution qu'on leur propose.
L'important est que cela fonctionne !
Ils ont même la caractéristiques d'être rigide dans leur raisonnement.
On a beau leur expliquer, ils n'en démordent pas. Ce sont eux qui sont dans le vrai et les autres ont tort !

Mais il y a ceux qui sont là pour apprendre, pour évoluer dans leur connaissance du sujet.
Cela se caractérise par une recherche de compréhensions où des questions sont posées afin de mieux cerner la problématique.
Ce sont d'ailleurs les plus intéressants car on peut apprendre d'eux aussi.
Ils ont aussi une caractéristique très appréciable, ils sont reconnaissants !!!

Dans la formulation de "Fred26100", je reste sur la gestion d'un service avec plusieurs fonctionnalités.
Du genre, créer des fonctions :
--> "trace" pour avoir les affichages.
--> "param" pour modifier le paramétrage interne
--> ...

Après, c'est dans l'imagination et dans les besoins, que le développeur saura quoi créer comme nouvelles fonctionnalités.
Ce sont des modes de fonctionnement en plus du classique "start", stop", "enable", disable".

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: télémaintenance sur ce process lancé au démarrage

Message par Bud Spencer » dim. 8 sept. 2019 11:45

@Domos : Tu sais, un débutant peut faire plein de chose assez facilement avec n’importe quel langage. Là ou ça coince, c’est quand il veut faire des choses un peu plus compliqués et ça quel que soit le langage utilisé. Flask est un framework web et là, ça n’a plus rien à voir (dans le meme genre tu as aussi Django, Bottle et sans doute d’autres). Ça c’est très bien pour faire de l’application web self hosted et j’ai souvent encouragé ce genre solution quand le besoin est de piloter une application en utilisant des pages web, mais là on parle de tout autre chose.

@Artemus : Je n’avais meme pas fait attention que la demande datait de 2016 :lol: . Quoi qu’il en soit, il n’est jamais trop tard pour apprendre.

Allez petit exercice vite fait d’échange entre processus en python en utilisant un fichier pipe d’entrée et un fichier de sortie. Ce n’est pas la meilleur méthode, mais si je le fais de façon asynchrone avec des sockets unix ou du shared mem, on va encore me dire que c’est pas pour les débutants :?

Le code :
pipe.png
pipe.png (30.45 Kio) Vu 5902 fois
On lance un terminal sur le pi et on démarre le script avec une commande :
python test.py > pipeout &
Le script démarre en arrière-plan (on note le n° du pid pour pouvoir l’arrêter plus tard) . Dans cette meme console (ou une autre), si on tape une commande ls pipe* on voit que le script a créé un fichier pipein et un fichier pipeout. On tape ensuite une commande tail –f pipeout pour lire le fichier de sortie en séquentiel.

Ensuite, on se connecte en ssh depuis une autre machine ou depuis une autre session terminal si on est en gui sur le pi et on tape une commande python test.py raz

On voit sur la console de la commande tail que le compteur compte (ce qui est souvent le cas pour des compteurs …). On laisse défiler quelques secondes et on retape la meme commande python test.py raz. Le compteur se remet à 1 et continu de compter.

Voilà, on sait comment on lister les sorties d'une programme qui s'exécute en tant que service et on sait lui passer des commandes et tout ça avec un seul et meme code. Comme quoi, tout est possible … quand on sait ou que l'on apprend à le faire.

Pour arrêter le service, il suffit de taper depuis n’importe quelle console une commande kill n°dupid. Pour pouvoir redémarrer le service, il faut supprimer les 2 fichiers pipe (rm pipe*), sinon, le script démarrera toujours sur la procédure console() (on aurrait pus le faire dans le code de la procédure service() mais bon … )

Bon Dimanche
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Verrouillé

Retourner vers « Les commandes Linux »