Maintenir une application Java en cours d'exécution lorsque SSH est fermé sur Google Cloud

12

En ce moment, j'exécute une application Java par SSH sur une machine virtuelle sur Google Cloud Compute. J'émets une commande pour exécuter l'application et elle charge une console. Dès que je mets fin à la connexion SSH, l'application s'arrête. Je suppose que c'est parce que la console a été fermée.

Je voudrais que cette application (qui est un serveur) persiste après avoir arrêté SSH et, à tout moment, je voudrais pouvoir me reconnecter à la console et émettre des commandes sur le serveur.

Noahb32
la source

Réponses:

14

Vous dites ceci:

Je voudrais que cette application (qui est un serveur) persiste après avoir arrêté SSH et, à tout moment, je voudrais pouvoir me reconnecter à la console et émettre des commandes sur le serveur.

Un peu vague dans les buts, mais je vais essayer!

Pour exécuter une commande en tant que processus d'arrière-plan sur un serveur Linux, vous devez nohupajouter la commande avec et ajouter &à la fin.

La commande finale serait donc:

nohup [your command] &

Les nohupmoyens de la commande doit ignorer « accrochages » et l'esperluette qui y est &annexé est une commande shell qui indique au système d'exécuter la commande comme processus d'arrière - plan. Vous trouverez plus d'informations sur son utilisation ici .

Lorsque vous exécutez une commande comme celle-ci, le processus s'exécute, vous serez renvoyé à l'invite de commande et vous pouvez quitter la session de terminal ou même aller faire autre chose sans rapport avec cette commande pendant cette session de terminal.

JakeGould
la source
1
Si je veux revenir au processus et entrer une commande dans la console java, comment faire?
Noahb32
1
@ Noahb32 Eh bien, cela le lancerait comme un processus d'arrière-plan; J'utilise principalement cette méthode pour simplement lancer un processus puis l'oublier. Si vous vouliez démarrer une nouvelle console Java, vous pouvez le faire puisque vous êtes de retour dans le shell. Mais peut-être devriez-vous screenplutôt utiliser l'utilisation car cela vous permet de revenir à la session après le lancement. Honnêtement, votre question est très vague, donc si vous pouviez la clarifier, cela pourrait aider à clarifier les choses.
JakeGould
1
Je vous remercie! Je voudrais ajouter que vous pouvez surveiller la sortie d'un autre terminal: exécutez simplement tail -f nohup.outle même travail. dir.
naXa
3

Il existe au moins trois façons de procéder: nohup(«pas de raccrochage»), screen/ tmux, ou disown. Il n'est pas clair de votre question quant à votre besoin de vous connecter au serveur et d'interagir avec le démon après vous être déconnecté.

Si tel est le cas, nohupet disownne sera pas de bons matchs que vous relâchez le processus (bien qu'il continue à fonctionner). tmux(et aussi screen) gardera un terme en cours même lorsque vous.

Pour plus d'informations, vous pouvez voir les pages respectives:

man nohup
man tux

Désavantage de Bash (en supposant que vous exécutez Bash, bien que de nombreux autres shell incluent quelque chose de similaire)

user1794469
la source
Il semble qu'il n'y ait pas de disowncommande sur Google Cloud, au moins l'instance que j'utilise, a commencé 2019 ou fin 2018. La nohupcommande fonctionne bien, mais elle crée un fichier supplémentaire qui peut ne pas être souhaité.
trysis
1

Pour détacher une application de son shell en cours d'exécution, la rendant persistante après la fermeture du shell, utilisez la nohupcommande.

Vous préfixez simplement votre commande normale avec nohupet cela devrait fonctionner.

Julie Pelletier
la source
0

De plus, si nohub ne fonctionne pas, vous pouvez utiliser screen :

 ssh into your remote box. 

écran de saisie Puis démarrez le processus que vous souhaitez.

Press Ctrl-A then Ctrl-D. 

Cela détachera votre session d'écran mais laissera vos processus en cours d'exécution. Vous pouvez maintenant vous déconnecter de la boîte distante.

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

de

votre processus.

bluejayke
la source