J’ai un script en Python3 que je lance par SSH (sur un serveur Debian) de mon téléphone (avec Termux). Le problème, c’est que le script met un peu de temps à s’exécuter.
Je souhaite le détacher de la connexion ssh dès qu’elle se lance. Un conseil pour ça proprement ?
Ma réponse va paraître un peu simplette, mais j’ai du mal à en formuler une autre étant donné le peu de détail que tu donnes (commande/démarche exacte ?) : tu as essayé avec un & après ta commande ?
Si je fais ça, c’est sur le téléphone que ça va se mettre en arrière-plan et ça va le faire tout de suite.
Et l’esperluette ne fonctionne pas en Python3, je crois.
Si le script Python3 doit s’exécuter sur le serveur, il est peut-être possible d’utiliser la commande at depuis le serveur pour qu’elle lance le script Python3.
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import bg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'bg'
>>> bg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'bg' is not defined
Comme le script mets un certain temps à s’exécuter, je me disais que c’était pas à la minute près : Si tu programme le lancement du script pour être lancé dans la minute suivante, tu peux te déconnecter tranquille de ta session ssh.
Et sinon le lancer dans un screen à l’aide de Screen ou Tmux ce ne serait pas plus simple comme ça tu détache le screen et tu laisse ton script se déroulé tranquillou.
Non, ça fait exactement la même chose, je ne sais pas pourquoi.
J’ai essayé de lancer ssh monserveur 'screen -d -m -S monscript -s ./monscript.py' et ça ne fonctionne pas du tout.
Pour ça, c’est pareil qu’avec l’esperluette, ça ne fait rien de mieux.[quote=« PengouinPdt, post:15, topic:71109 »]
Comme quoi je ne suis pas si loin de la réponse :
exemple avec nohup
exemple avec subprocess
[/quote] nohup python bgservice.py & cmd = 'ssh ' + ssh_options + ' ' + server_name + ' "/usr/bin/nohup /usr/bin/python /home/admin/run.py 2>&1 &"'
C’est un peu pareil, non ? Et ce n’est toujours pas du Python. Et en plus, ça ne met toujours pas la tâche en fond.
Je peux me tromper (encore heureux), mais il me semble que si le fil d’exécution principal est fermé, les fils en descendant le seront aussi. Donc s’il lance son script et le quitte tout de suite après, les fils qu’il aura lancés seront automatiquement tués.
Non, le fil principal attend la terminaison des autres fils pour se fermer. Mais, ce n’est pas bon dans les deux cas.
Non, mais je cherche un moyen que le script fasse ça par lui-même, pas qu’il lance une commande qui lance un autre truc sur le script. Normalement, il devrait pouvoir faire ça sur lui-même et tout seul, non ?