Comment puis-je garder un processus en vie après la fermeture de la session de mastic?

41

J'utilise putty pour interagir avec le serveur Linux. J'ai commencé un processus utilisant du mastic. Le processus est en cours et prendra 5-6 heures. Je veux que ce processus continue à fonctionner après la fermeture de la session de mastic. Comment puis-je maintenir ce processus actif après la fermeture de la session de mastic? Je ne veux pas garder l'ordinateur allumé tout le temps. Est-ce qu'il y a un moyen de faire ça?.

prakash.panjwani
la source

Réponses:

32

J'utilise screen pour ce genre de choses. En fait, parfois, je le laisse assez longtemps pour pouvoir revenir à ce que je faisais.

ziya
la source
Le processus est en cours maintenant, est-ce que cela fonctionne pour ce processus? Je le demande parce que le processus est au milieu et je ne veux pas le redémarrer maintenant
+1 pour avoir mentionné mon outil de ligne de commande favori incontesté. C'est un joyau dans des situations comme celle-ci.
Noufal Ibrahim
@Noufal, totalement! @prakash, vous devez exécuter screen avant de pouvoir démarrer tout processus
ziya
Si vous souhaitez vous connecter à plusieurs machines, il peut être intéressant d'exécuter plusieurs écrans à l'intérieur du premier écran. Il vous suffit donc de vous connecter à un seul écran pour accéder à toutes vos télécommandes en cours d'exécution.
le lien ne fonctionne plus
Malky.Kid
31
^Z
bg %1
disown -h %1

Le '-h' rend le processus immunisé contre SIGHUP lorsque la session est terminée.

Tom Anderson
la source
3
Notez qu'il n'y a aucun moyen de "reprendre" ou d '"adopter" le processus - une fois que vous avez fait cela, vous ne pouvez plus jamais le ramener au premier plan. Si le processus est un travail par lots visant à produire des fichiers, cela ne devrait pas avoir d'importance.
19

Utilisez la nohupcommande. Il suffit de le préfixer à votre commande et il sera démonisé de sorte qu’ils ne s’arrêtent pas lorsque vous vous déconnectez / mettez fin à votre session shell. La sortie standard sera par défaut dans un fichier nommé nohup.out. Consultez la page de manuel nohup(1)pour plus d'informations.

Noufal Ibrahim
la source
le processus est en cours d'exécution, est-ce que cela fonctionne pour ce processus? Je demande parce que le processus est au milieu et je ne veux pas le redémarrer maintenant?
Trop tard ... du moins pour les opérations normales. Il ne serait pas tout à fait surprenant de constater que si vous associez un débogueur au processus, puis que vous le peaufiniez avec un ensemble approprié d'appels système, vous pourriez peut-être le mettre en arrière-plan. Mais ce n’est pas ce qui pourrait être recommandé - par exemple, cela ne me dérangerait pas et j’ai au moins une idée de ce qui pourrait être impliqué. Vous avez maintenant deux choix ... restez connecté jusqu'à la fin, ou arrêtez le processus en cours et redémarrez-en un nouveau en utilisant nohup.
Jonathan Leffler
1
Si vous utilisez bash (et je pense zsh), vous pouvez utiliser la solution de Tom Anderson et disownle processus pour qu'il continue de s'exécuter même lorsque vous vous déconnectez.
Noufal Ibrahim
Yup - désaveu semble être la voie à suivre pour un travail déjà en cours. C'est faisable car le shell qui a démarré le travail peut manipuler les propriétés nécessaires.
Jonathan Leffler
5

Démarrer le processus avec nohup "processname" &. Vous pouvez également le détacher avec screenou tmux.

Damir
la source
3

Les solutions ci-dessus sont assez bien décrites, mais aucune d’entre elles n’a fonctionné jusqu’à ce que j’ai également modifié la configuration de PuTTY pour:

Activer Keepalives TCP (option SO_KEEPALIVE)

Je n'avais vu cela nulle part ailleurs et je l'ai trouvé par essais et erreurs.

utilisateur295374
la source
1

Ctrl + z Envoie le processus en cours à l'arrière-plan.

De plus, vous pouvez ajouter & à la fin de votre commande pour s’exécuter en arrière-plan

BarsMonster
la source
4
Normalement, control-z place le processus dans un état d'animation suspendue; la commande bg le met en arrière-plan. Cependant, cela maintient également le processus attaché au terminal, alors que nohup le sépare du terminal et permet donc au mastic de se déconnecter et au processus de survivre à la déconnexion.
Jonathan Leffler
J'ai constaté que l'utilisation de '&' pour envoyer à l'arrière-plan fonctionne avec du mastic, mais lorsque je me connecte directement à l'aide de ssh à partir d'un shell, si je ferme la connexion, le processus d'arrière-plan est supprimé. Une idée de pourquoi?
Zardoz89
0

Si vous souhaitez que le programme contenu dans le processus s'exécute toujours ou fréquemment en arrière-plan, vous pouvez le coder pour le séparer du terminal de contrôle (rendre ce comportement contrôlable via un indicateur d'option) et s'exécuter en arrière-plan.

C'est une solution à long terme, bien sûr, pas pour le processus en cours.

mpez0
la source
0

Vous pouvez utiliser &après le lien.

Exemple:

[localhost ~ ]# wget http://www.link.com/download/download.zip &
codemania
la source
La question ne concernait pas un lien, voulez-vous dire ajouter un &signe après la ligne de commande?
Danny
0

Comment garder weblogic actif après la fermeture de la fenêtre mastic:

Étapes simples: après la connexion via putty, suivez les étapes ci-dessous:

  1. Accédez au répertoire sur le serveur où startWebLogic.shse trouve la commande.
  2. Tapez commande screenet appuyez sur Enter(un nouvel écran s'ouvrira).
  3. Dans le nouvel écran, tapez votre commande d'exécution ./startWebLogic.sh.
  4. Appuyez sur Ctrl+ apuis appuyez sur d(sans maintenir Ctrl); vous retournerez à l'écran précédent.
  5. Lorsque vous souhaitez revenir à l'écran du journal de votre serveur, tapez command screen -r.
Akbar
la source
0

si le processus est un pour nodejs, et cela peut être votre intention depuis que vous avez posté ceci sur stackoverflow. Au départ, je cherchais moi-même cette question. J'ai trouvé pm2 et c'est incroyable. Les autres réponses peuvent aider pour le mastic en général, mais si c'est spécifique à un nœud, c'est de loin la meilleure réponse, car il y a une surveillance intégrée et la configuration est simplement un

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 est un gestionnaire de processus de production pour les applications Node.js avec un équilibreur de charge intégré. Il vous permet de conserver les applications en vie, de les recharger sans interruption et de faciliter les tâches d'administration système courantes.

Démarrer une application en mode production est aussi simple que: "

$ pm2 start yourappname.js

"en utilisant la commande save puis freeze, vous activez le démarrage automatique des processus au redémarrage"

$ pm2 save
$ pm2 freeze

pour surveiller ses

$ pm2 monit

et redémarre

$ pm2 restart yourappname

aussi pour les informations de journalisation directe

$ pm2 logs

Je peux maintenant facilement exécuter deux fenêtres de mastic au lieu d’utiliser ma fenêtre de navigateur digialocean (sur laquelle je ne pouvais pas faire défiler la page vers le haut); Pour plus d'informations, voir le github principal

https://github.com/Unitech/pm2

c'est incroyable.

solutions simples
la source
Pouvez - vous expliquer un peu plus sur ce que PM2 est et ce que les commandes que vous montrer faire? S'il vous plaît ne répondez pas dans les commentaires; éditez  votre réponse pour la rendre plus claire et plus complète.
G-Man dit 'Réintégrez Monica' le
Ajout d'un peu plus de documentation pour la communauté. J'aurais aimé trouver pm2 ans auparavant.
sasy solutions