Setsid ne marche qu'un temps
Bonsoir,
Je me suis rendu compte que nombre de problèmes que j'avais rencontrés étaient dus à un problème assez ennuyeux : quand je lance un programme avec setsid, que ce soit un bot en C destiné à un tchat, ou un script PHP destiné à servir de serveur socket, il marche un moment mais finit par s'arrêter.
Ce temps est variable, ça va de quelques secondes à plusieurs heures.
Je fais par exemple
setsid php -f socket3.php
, et tant que le Terminal reste ouvert c'est bon, ensuite je le ferme et au bout d'un moment les clients ne peuvent plus se connecter.
Je rouvre une session, fais un ps aux et vois que le processus n'est bel et bien plus là.
Comment remédier à ce problème ?
Je précise qu'Ubuntu est sur mon serveur, je ne lance pas ces choses depuis chez moi, et c'est pour ça que je suis obligé d'utiliser setsid pour que les choses restent lancées.
Merci d'avance
Je me suis rendu compte que nombre de problèmes que j'avais rencontrés étaient dus à un problème assez ennuyeux : quand je lance un programme avec setsid, que ce soit un bot en C destiné à un tchat, ou un script PHP destiné à servir de serveur socket, il marche un moment mais finit par s'arrêter.
Ce temps est variable, ça va de quelques secondes à plusieurs heures.
Je fais par exemple
setsid php -f socket3.php
, et tant que le Terminal reste ouvert c'est bon, ensuite je le ferme et au bout d'un moment les clients ne peuvent plus se connecter.
Je rouvre une session, fais un ps aux et vois que le processus n'est bel et bien plus là.
Comment remédier à ce problème ?
Je précise qu'Ubuntu est sur mon serveur, je ne lance pas ces choses depuis chez moi, et c'est pour ça que je suis obligé d'utiliser setsid pour que les choses restent lancées.
Merci d'avance
A voir également:
- Setsid ne marche qu'un temps
- Renommer plusieurs fichiers en même temps - Guide
- Family link le temps ne correspondent pas - Forum Contrôle parental
- Comment faire sauté mon temps d'utilisation family link SVP! - Forum Téléphones & tablettes Android
- Temps pour soi iphone - Guide
- 35 go internet combien de temps ✓ - Forum Free mobile
9 réponses
C'est tout à fait normal, car ton processus est rattaché à un shell que tu tues en quittant ton terminal. Il faut donc l'e n détacher.
Pour cela tu disposes de deux outils :
- nohup : il suffit à faire ce que tu souhaites
- screen : il permet d'encapsuler un shell que tu peux réutiliser plus tard : http://doc.ubuntu-fr.org/screen
Je te conseille nohup ça te suffira amplement et c'est plus simple à utiliser :
Bonne chance
Pour cela tu disposes de deux outils :
- nohup : il suffit à faire ce que tu souhaites
- screen : il permet d'encapsuler un shell que tu peux réutiliser plus tard : http://doc.ubuntu-fr.org/screen
Je te conseille nohup ça te suffira amplement et c'est plus simple à utiliser :
nohup ma_commande
Bonne chance
Un ami m'a en effet parlé de screen par la suite, j'essaierai les deux.
Mais alors, pourquoi est-ce que ça marche tout de même pendant un moment ?
Merci de ta réponse
Mais alors, pourquoi est-ce que ça marche tout de même pendant un moment ?
Merci de ta réponse
Aucune idée, a priori le processus meurt tout de suite. Je pense que c'est simplement les clients qui mettent un peu de temps à s'en apercevoir.
De toutes façons c'est facile à vérifier. Tu te connectes via deux terminaux :
- le premier sert à faire ta manipulation habituelle,
- le deuxième sert uniquement à faire des "ps faux" et des "netstat -a".
Et tu seras fixé ;)
Bonne chance
De toutes façons c'est facile à vérifier. Tu te connectes via deux terminaux :
- le premier sert à faire ta manipulation habituelle,
- le deuxième sert uniquement à faire des "ps faux" et des "netstat -a".
Et tu seras fixé ;)
Bonne chance
Bah je confirme que ça ne se ferme pas tout de suite, puisque ça marche parfois pendant plusieurs minutes encore, ps aux à l'appui... Et mes clients ne laggent pas (huhu), vu que quand je kill manuellement le serveur, ils affichent INSTANTANEMENT que la liaison a été coupée...
Mystérieux...
Mystérieux...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui comme tu dis ^^ Peut-être que quand tu lances ton serveur le script charge un processus détaché de ton shell (une sorte de loader). Alors que quand tu tues ton serveur, tu tues explicitement le serveur. C'est l'intérêt du "ps faux" on voit rapidement les dépendances entre les processus. Enfin ça me paraît assez vaseux comme explication :-)
Bon mais à la limite peu importe, tu as testé avec nohup ?
Bonne chance
Bon mais à la limite peu importe, tu as testé avec nohup ?
Bonne chance
C'est de plus en plus bizarre mais à la limite ça a le mérite d'être logique. Pour une raison assez étrange ton serveur doit se dire "et si je me fermais" lorsqu'il ne te vois plus connecté. Du coup ça expliquerait pourquoi le comportement est le même avec nohup et quand tu te déconnectes. La question maintenant c'est pourquoi (et comment y remédier !).
C'est quoi au fait comme genre de serveur ?
Je craque cpeut-être complètement, mais que se passe-t'il si tu te loggues sur cette machine et qu'à partir de ce shell, tu lances le serveur au travers d'un ssh vers localhost. Exemple (en remplaçant login par ton login sur cette machine, et serveur par le hostname du serveur ou son adresse IP) :
(ctrl z)
(ctrl d)
Bonne chance
C'est quoi au fait comme genre de serveur ?
Je craque cpeut-être complètement, mais que se passe-t'il si tu te loggues sur cette machine et qu'à partir de ce shell, tu lances le serveur au travers d'un ssh vers localhost. Exemple (en remplaçant login par ton login sur cette machine, et serveur par le hostname du serveur ou son adresse IP) :
ssh login@serveur nohup ssh root@localhost la_commande_pour_lancer_le_serveur
(ctrl z)
bg
(ctrl d)
Bonne chance
Je ne peux pas essayer ton truc car c'est un peu le bordel au niveau des sessions, m'enfin j'ai essayé screen et il me semble que ça fonctionne à long terme.
Mon serveur est un Ubuntu Server 8.04.1, un RPS1 de chez OVH. J'y ai un accès root donc, c'est comme un dédié.
Merci encore de ton aide, à moins que screen me lâche lui aussi ça devrait être bon. Je lance ce soir, et je verrai demain matin s'il a tenu pendant la nuit, alors je partirai de l'idée que je n'ai plus à m'en préoccuper.
A+
Mon serveur est un Ubuntu Server 8.04.1, un RPS1 de chez OVH. J'y ai un accès root donc, c'est comme un dédié.
Merci encore de ton aide, à moins que screen me lâche lui aussi ça devrait être bon. Je lance ce soir, et je verrai demain matin s'il a tenu pendant la nuit, alors je partirai de l'idée que je n'ai plus à m'en préoccuper.
A+