Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2006, 20h57   #1
Nouveau Membre du Club
 
Inscription : octobre 2003
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 40
Points : 28
Points : 28
Par défaut Lancer une application en tache de fond

Bonjour à tous.
Alors voila j'arrive à lancer une application java via SSH sur un serveur Linux redhad. Je lance cette application (un serveur socket en Java) comme ceci :
Code :
java -jar monServer.jar &
Mais pour que le serveur socket marche il faut que je fasse :
Par contre lorsque je quitte mon client SSH (putty) le serveur socket s'arrête.
Lorsque je fais Le serveur ne marche socket plus ... il faut que je fasse un fg 1 ...
Avez-vous une idée pour lancer cette application en tache de fond afin qu'elle fonctionne même si je quitte mon client SSH ?
Merci
nanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 21h10   #2
Nouveau Membre du Club
 
Inscription : octobre 2003
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 40
Points : 28
Points : 28
J'ai trouvé comment lancé le serveur avec :
Code :
/usr/bin/nohup java -jar MonServer.jar &
Et j'y accède avec
Le problème c'est que je sais pas comment stopper mon application.
Avez-vous une idée ?
Merci
nanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 21h46   #3
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Salut,

Tu peux essayer ça :
Code :
1
2
3
nohup java -jar MonServer.jar 2&>1 1&> MonServer.log &
echo $! > MonServer.pid
kill `cat MonServer.pid`
Voilà comme ça tes sorties ne sont pas perdues et tu récupères droits derrière le PID de ton processus ($!) tu mets ça dans un fichier et tu peux tuer ton truc en lisant la valeur dans le fichier.
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 22h45   #4
Nouveau Membre du Club
 
Inscription : octobre 2003
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 40
Points : 28
Points : 28
Merci pour votre réponse.
En fait mon application est déjà lancée avec
Code :
/usr/bin/nohup java -jar MonServer.jar &
Il y'a un fichier nohup.out qui s'est crée dans le dossier contenant MonServer.jar
dois-je le supprimer ?
Dois-je faire un
Merci
nanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 06h41   #5
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Chez moi il ne créé aucun fichier, mais la page de man indique que la commande nohup dépend de l'interpréteur de commande et peut varier. Mais une recherche indique que nohup peut créer un fichier nohup.out ou $HOME/nohup.out qui contient la sortie standard du programme : http://www.ss64.com/bash/nohup.html.

Maintenant ce qui est important c'est de garder le PID du programme lancé. Dans bash, la variable $! contient le PID du dernier programme lancé. C'est pourquoi avant d'executer une autre commande, après avoir lancé "MonServer", il faut tout de suite faire
Code :
echo $! > MonServer.pid
Ainsi le PID du programme est stocké dans le fichier "MonServer.pid".
Avec ça, il est très facile de stoper le programme. En faisant :
Tu auras le PID du programme lancé, maintenant pour utiliser cette valeur tu utilises les backquotes : http://www.faqs.org/docs/abs/HTML/commandsub.html.

Les backquotes permettent de réassigner la sortie d'une commande à un autre contexte, donc en faisant :
Code :
kill `cat MonServer.pid`
Tu utilises la valeur contenue dans le fichier MonServer.pid comme argument à la commande kill. Tu pourrais aussi faire :
Code :
1
2
PID_DE_MON_SERVER=`cat MonServeur.pid`
kill $PID_DE_MON_SERVER
Comme ça tu peux réutiliser le PID plus tard (pour contrôler si le programme est bien arrêter par exemple).

Le PID c'est le Process IDendification un numéro attribué par le noyau à chaque processus sur le système. À partir du PID, on peut accéder à beaucoup d'informations sur un programme en utilisant par exemple /proc/$PID/ :
http://ftp.traduc.org/doc-vf/gazette...5/lg115-E.html.
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 14h07   #6
Nouveau Membre du Club
 
Inscription : octobre 2003
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 40
Points : 28
Points : 28
Merci pour vos réponse mais j'ai un problème.
J'ai supprimé le fichier nohup.out pensant que ça allait arrêté mon serveur mais il est toujours en route.
Alors lorsque je fait un tail -f nohup.out j'arrive plus à accéder à MonServer.
Comment puis-je faire pour arrêter cette application en tache de fond ?
Merci
nanu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 16h31   #7
Membre éprouvé
 
Avatar de Tchetch
 
Inscription : mars 2002
Messages : 401
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2002
Messages : 401
Points : 434
Points : 434
Et ça :
Code :
kill `ps -e | grep MonServer | awk '{print $1;}'`
Tchetch est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h04.


 
 
 
 
Partenaires

Hébergement Web