Führen Sie einen Befehl in einer Shell und hält den Befehl ausführen, wenn Sie die Sitzung schließen

StackOverflow https://stackoverflow.com/questions/431521

  •  08-07-2019
  •  | 
  •  

Frage

Ich bin mit Putty auf einen Remote-Server zu verbinden. Was ich wissen möchte, ist, ob es eine Möglichkeit, meine Befehle zu schreiben und es ihnen ermöglichen, am Laufen zu halten, nachdem ich die Sitzung mit Putty schließen. Der Grund dafür ist, dass ich möchte nicht den Computer die ganze Zeit zu halten. Gibt es eine Möglichkeit, dies zu tun?.

Update mit der Lösung

Für meine Frage, wie es die beste Lösung präsentiert wird, ist einer der vorgesehenen Befehle wie nohup , da Sie keine zusätzliche Software nicht installieren. Aber wenn Sie in dem gleichen Problem Verwendung Bildschirm sind, installieren Sie sie und verwenden. Es ist erstaunlich.

Ich habe die Antwort von Norman Ramsey als Favorit ausgewählt, weil mehrere Lösungen vorschlagen, mit Befehlen und Bildschirm . Aber bitte die anderen Antworten überprüfen speziell derjenige von PEZ, dann erhalten Sie einen Einblick von dem, was Bildschirm ist in der Lage todo.

War es hilfreich?

Lösung

nohup, disown und screen sind alle gut, aber screen ist die beste, weil im Gegensatz zu den beiden anderen, screen Sie vom Remote-Server trennen können, halten alles am Laufen, und dann später wieder, um zu sehen, was geschieht. Mit nohup und disown können Sie nicht die Interaktion fortsetzen.

Andere Tipps

Bildschirm! Es ist die beste Sache seit geschnittenem Brot. (Ja, ich weiß, andere haben bereits vorgeschlagen, aber es ist so gut, die ganze Welt mitmachen sollte, und schlägt sie auch.)

Bildschirm ist wie, wie, ummmm ... wie mit VNC oder dergleichen zu einer GUI destop zu verbinden, aber für Kommando-Shell-Fenster. Sie können in der gleichen Bildschirm-Sitzung auf einmal mehr Shell „Fenster“ geöffnet haben. Sie können wie Dinge tun:

  1. Starten Sie eine Bildschirm-Sitzung mit „Bildschirm -Dr“ (gewöhnen mit -Dr)
    • einige Befehle in einem Fenster ausführen
    • drücken Sie STRG - A , C ein neues Fenster öffnen dort eine Datei in vim erstellen
    • drücken Sie STRG - A , 0 , um zum ersten Fenster zurückgehen und einen Befehl auf der Datei ausgeben Sie gerade bearbeitet
    • STRG - A , 1 , um zurück zu Ihrer vim Sitzung gehen
    • STRG - A , C für ein weiteres Fenster und vielleicht tun "sudo - su" (weil Sie nur eine volle brauchen passieren root-Shell)
    • STRG - A , 0 und einen Hintergrundprozess starten
    • STRG - A , C noch ein neues Fenster für den Hintergrundprozess "-f tail" das Protokoll zu erstellen,
    • STRG - A , d Ihr Bildschirm trennen und dann die STRG - D vom Server trennen
    • im Urlaub gehen drei Wochen
    • Melden Sie sich auf dem Server wieder und Ausgabe „-Bildschirm -Dr“, um Ihre vorhandenen Bildschirm-Sitzung zu verbinden
    • das Protokoll in der mit dem vierten Fenster überprüfen STRG - A , 3 (es ist wie Sie habe es sie alle beobachten Zeit)
    • STRG - A , 1 erneut, dass vim Sitzung holen
    • Ich denke, Sie beginnen jetzt das Bild zu bekommen? =)

Es ist wie Magie. Ich habe schon länger mit Bildschirm als ich mich erinnern kann, und ich bin immer noch total begeistert mit, wie blutig groß es ist.

Bearbeiten : Ich will nur erwähnen, gibt es jetzt auch tmux . Sehr viel wie Bildschirm , hat aber einige einzigartige Eigenschaften, Aufteilung der Fenster der prominenteste ist.

Versuchen Sie GNU Screen- verwenden. Es ermöglicht Ihnen, mehrere Granaten auf einmal öffnen müssen. Und Sie können aus diesen Laufschalen trennen (d schließen Sitzung mit Putty) und sie halten ihr eigenes Ding machen.

Was Sie suchen ist nohup .

Sehen Sie den Wiki-Link, wie es zu benutzen.

Bildschirm ist die beste.

Versuchen:

Bildschirm -DMS "MyTail" tail -f / var / log / syslog

Dieser Startbefehl im Hintergrund.

Verwenden screen -r zur Liste und oder screen -r MyTail Sitzung eingeben.

Wenn mehr Benutzer benötigen Zugriff auf derselben Sitzung, zu verwenden:. Bildschirm -rx MyTail, und beide oder mehrere Benutzer teilen sich die Sitzung

Wenn Sie nicht screen verwenden können (weil zum Beispiel Ihre SSH-Sitzung programmatisch angetrieben wird), können Sie auch ein href verwenden <= „http://www.clapper.org/software/daemonize/“ rel = "nofollow noreferrer"> daemonize das Programm als Daemon ausgeführt werden.

Eine Möglichkeit, die gut funktioniert für mich ist at.

at funktioniert wie Cron, aber für eine einmalige Aufgabe. Ich habe es heute eine große Datei herunterladen, ohne meine Sitzung am Leben zu halten zu haben.

Beispiel:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

Sie übergeben at eine Zeit (in der Zukunft) und es gibt Ihnen eine prompte. Sie geben die Befehle, die Sie zu diesem Zeitpunkt ausgeführt werden soll und drücken Sie anschließend Strg + d. Sie können Ihre Sitzung verlassen und es wird die Befehle zu der angegebenen Zeit ausgeführt werden.

Wikipedia weitere Informationen über at hat.

./command & disown
ssh localhost && ./command && exit
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top