Wie kann ich einen Prozess am Leben erhalten, nachdem ich die Putty-Sitzung beendet habe?

41

Ich benutze Kitt, um mit Linux-Server zu interagieren. Ich habe einen Prozess mit Kitt gestartet. Der Prozess läuft und dauert 5-6 Stunden. Ich möchte, dass dieser Prozess weiterläuft, nachdem ich die Kitt-Sitzung geschlossen habe. Wie kann ich diesen Prozess nach Abschluss der Putty-Sitzung am Leben erhalten? Ich möchte den Computer nicht ständig eingeschaltet lassen. Gibt es eine Möglichkeit, dies zu tun?

prakash.panjwani
quelle

Antworten:

32

Ich benutze Bildschirm für solche Sachen. Eigentlich lasse ich es manchmal einfach eine ganze Weile, damit ich wieder zu dem komme, was ich getan habe.

ziya
quelle
Der Prozess läuft jetzt, funktioniert er für diesen Prozess? Ich
+1 für die Erwähnung meines unbestrittenen Lieblingsbefehlszeilentools. In solchen Situationen ist es ein Juwel.
Noufal Ibrahim
@Noufal, total! @prakash, Sie müssen screen ausführen, bevor Sie Prozesse starten können
ziya
Wenn Sie eine Verbindung zu mehreren Computern herstellen möchten, kann es sogar eine gute Idee sein, mehrere Bildschirme im ersten Bildschirm auszuführen, sodass Sie nur eine Verbindung zu einem Bildschirm herstellen müssen, um auf alle Ihre laufenden Fernbedienungen zugreifen zu können.
Der Link funktioniert nicht mehr
Malky.Kid
31
^Z
bg %1
disown -h %1

Das '-h' macht den Prozess immun gegen SIGHUP, wenn die Sitzung abgeschlossen ist.

Tom Anderson
quelle
3
Beachten Sie, dass es keine Möglichkeit gibt, den Prozess zu "wiederholen" oder zu "übernehmen" - wenn Sie dies getan haben, können Sie ihn niemals wieder in den Vordergrund stellen. Wenn es sich bei dem Prozess um einen Batch-Job handelt, mit dem einige Dateien erstellt werden, sollte dies jedoch keine Rolle spielen.
19

Verwenden Sie den nohupBefehl. Stellen Sie es einfach Ihrem Befehl voran und es wird sie dämonisieren, damit sie nicht anhalten, wenn Sie Ihre Shell-Sitzung abmelden / beenden. Die Standardausgabe erfolgt standardmäßig in einer Datei namens nohup.out. nohup(1)Weitere Informationen finden Sie auf der Handbuchseite .

Noufal Ibrahim
quelle
Der Prozess läuft, funktioniert er für diesen Prozess? Ich frage, weil sich der Prozess in der Mitte befindet und ich ihn jetzt nicht neu starten möchte.
Zu spät ... zumindest für den normalen Betrieb. Es wäre nicht verwunderlich, wenn Sie einen Debugger an den Prozess anhängen und ihn dann mit einem geeigneten Satz von Systemaufrufen optimieren würden, dann könnten Sie ihn vielleicht in den Hintergrund stellen. Aber es ist nicht das, was empfohlen werden könnte - ich würde mich zum Beispiel nicht darum kümmern, und ich habe zumindest eine Vorstellung davon, worum es gehen könnte. Sie haben jetzt zwei Möglichkeiten: Bleiben Sie entweder in Verbindung, bis der Vorgang abgeschlossen ist, oder beenden Sie den aktuellen Prozess und starten Sie einen neuen mit nohup.
Jonathan Leffler
1
Wenn Sie bash verwenden (und ich denke, zsh), können Sie die Lösung von Tom Anderson und disownden Prozess verwenden, sodass sie auch dann weiter ausgeführt werden, wenn Sie die Verbindung trennen.
Noufal Ibrahim 16.01.10
Yup-disown scheint der richtige Weg zu sein, um einen bereits laufenden Job zu erledigen. Dies ist möglich, da die Shell, die den Job gestartet hat, die erforderlichen Eigenschaften ändern kann.
Jonathan Leffler
5

Prozess starten mit nohup "processname" &. Sie können es auch mit screenoder entfernen tmux.

Damir
quelle
3

Die obigen Lösungen sind recht gut beschrieben, jedoch hat keine von ihnen bei mir funktioniert, BIS ich auch die PuTTY-Konfiguration bearbeitet habe, um:

TCP-Keepalives aktivieren (Option SO_KEEPALIVE)

Ich hatte das nirgendwo anders gesehen und es einfach durch Ausprobieren gefunden.

user295374
quelle
1

Strg + z Sendet den aktuellen Prozess in den Hintergrund.

Sie können auch & am Ende Ihres Befehls hinzufügen, um es im Hintergrund auszuführen

BarsMonster
quelle
4
Normalerweise versetzt control-z den Prozess in einen Zustand mit angehaltener Animation. Der Befehl bg stellt ihn in den Hintergrund. Dadurch bleibt jedoch auch der Prozess mit dem Terminal verbunden, wohingegen nohup ihn vom Terminal trennt und daher ermöglicht, dass sich der Kitt trennt und der Prozess die Trennung überlebt.
Jonathan Leffler
Ich habe festgestellt, dass das Senden mit '&' in den Hintergrund mit putty funktioniert. Wenn ich mich jedoch direkt mit ssh aus einer Shell verbinde, wird der Hintergrundprozess abgebrochen, wenn ich die Verbindung schließe. Irgendeine Idee warum?
Zardoz89,
0

Wenn das im Prozess enthaltene Programm immer oder häufig im Hintergrund ausgeführt werden soll, können Sie es so codieren, dass es vom steuernden Terminal getrennt wird (dieses Verhalten kann über ein Optionsflag gesteuert werden) und im Hintergrund ausgeführt werden.

Das ist natürlich eine langfristige Lösung, nicht für den derzeit laufenden Prozess.

mpez0
quelle
0

Sie können &nach dem Link verwenden.

Beispiel:

[localhost ~ ]# wget http://www.link.com/download/download.zip &
Codemania
quelle
Die Frage handelte nicht von einem Link. Meinst du, ein &Zeichen nach der Befehlszeile einfügen?
Danny
0

So halten Sie Weblogic am Laufen, nachdem Sie das Kittfenster geschlossen haben:

Einfache Schritte: Nach dem Login durch Putty folgen Sie den folgenden Schritten:

  1. Wechseln Sie zu dem Verzeichnis auf dem Server, auf dem sich der startWebLogic.shBefehl befindet.
  2. Geben Sie command ein screenund drücken Sie Enter(ein neuer Bildschirm wird geöffnet).
  3. Geben Sie auf dem neuen Bildschirm Ihren Befehl run ein ./startWebLogic.sh.
  4. Drücken Sie Ctrl+ adrücken Sie dann d(ohne Holding Ctrl); Sie kehren zum vorherigen Bildschirm zurück.
  5. Wenn Sie zum Serverprotokollbildschirm zurückkehren möchten, geben Sie command ein screen -r.
Akbar
quelle
0

Wenn es sich bei dem Prozess um ein für NodeJS handelt, ist dies möglicherweise Ihre Absicht, da Sie dies ursprünglich auf Stackoverflow gepostet haben. Ich habe diese Frage ursprünglich selbst gesucht. Ich habe pm2 gefunden und es ist unglaublich. Die anderen Antworten können für allgemeinen Kitt hilfreich sein, aber wenn es knotenspezifisch ist, ist dies bei weitem die beste Antwort, da eine eingebaute Überwachung vorhanden ist und das Setup einfach a ist

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 ist ein Produktionsprozess-Manager für Node.js-Anwendungen mit integriertem Load Balancer. Er ermöglicht es Ihnen, Anwendungen für immer am Leben zu erhalten, sie ohne Ausfallzeiten neu zu laden und allgemeine Systemadministrationsaufgaben zu vereinfachen.

Das Starten einer Anwendung im Produktionsmodus ist so einfach wie:

$ pm2 start yourappname.js

"Mit dem Befehl" save and then freeze "können die Prozesse beim Neustart automatisch gestartet werden."

$ pm2 save
$ pm2 freeze

zur Überwachung seiner

$ pm2 monit

und startet neu

$ pm2 restart yourappname

auch zur direkten Protokollierung von Informationen

$ pm2 logs

Ich kann jetzt problemlos zwei Kittfenster ausführen, anstatt mein Digialocean-Browserfenster zu verwenden (auf dem ich nicht nach oben scrollen konnte). Weitere Informationen finden Sie im Haupt-Github

https://github.com/Unitech/pm2

es ist wunderbar.

sasy solutions
quelle
Können Sie uns etwas näher erläutern, was pm2 ist und was die angezeigten Befehle bewirken ? Bitte antworten Sie nicht in Kommentaren; Bearbeiten Sie  Ihre Antwort, um sie klarer und vollständiger zu gestalten.
G-Man sagt, dass Monica
Ein bisschen mehr Dokumentation für die Community hinzugefügt. Ich wünschte, ich hätte pm2 Jahre zuvor gefunden.
sasy solutions