Ich lief also apt-get upgrade
auf einem Server, als der Router feststellte, dass es zu lange her ist, seit ich das letzte Mal wütend geworden bin : Die Verbindung wurde unterbrochen. Die Moral der Geschichte ist, screen
viel zu verwenden, wenn Sie auf einem Penner-Router sind.
Wie auch immer, ich habe mich wieder angemeldet und festgestellt, dass der Prozess immer noch dort hängt und immer noch auf das Upgrade meines Y / n wartet (hatte ihn zum Glück noch nicht getroffen). Kann ich auf irgendeine Weise eine abgebrochene Sitzung wiederherstellen? Am Ende habe ich es nur gekillt, da es sich nicht in der Mitte der Paketverwaltung befand, aber es wäre großartig, es für zukünftige Referenz zu wissen.
apt-get
Prozess noch lief. Es sollte zusammen mit der gesamten Prozesskette bis zu SSH abgestorben sein. Mir ist aufgefallen, dassdo-dist-upgrade
in einerscreen
/byobu
Session automatisch gestartet wird: Geht das unter Umständenapt-get
auch so?Antworten:
Die Antwort auf Ihre richtige Frage lautet: Sie können nicht . Ich denke, das Hauptproblem ist, dass die Authentifizierungsverfahren nicht synchron sind. Es funktioniert einfach nicht so.
Wie Sie selbst bemerkt haben, besteht die Lösung darin, wenn möglich screen zu verwenden ( tmux ist übrigens eine Alternative zu screen).
quelle
byobu
ist ein nettes, einfacher zu bedienendes Frontend fürscreen
(odertmux
) - definitiv einen Blick wert (:Für die Ausführung langlebiger Prozesse verwende ich screen oder byobu, wenn Sie eine benutzerfreundlichere Oberfläche wünschen.
Für den Bildschirm können Sie Folgendes verwenden:
Dadurch werden [program] und seine [args] in einer Bildschirmsitzung ausgeführt . Sobald das Programm beendet ist, wird die Sitzung automatisch geschlossen. Wenn Sie die Sitzung nach der Ausführung Ihres Programms fortsetzen möchten, führen Sie einfach den Bildschirm ohne Argumente aus. In der Sitzung wird eine neue Eingabeaufforderung angezeigt. STRG + A + D trennt das Terminal von der aktuellen Sitzung.
So fügen Sie eine vorherige Sitzung erneut hinzu:
Wenn nur eine Sitzung geöffnet ist, wird die Verbindung sofort wieder hergestellt. Wenn mehrere Sitzungen ausgeführt werden, werden Sie gefragt, zu welcher Sie eine Anlage hinzufügen möchten. Wenn Sie den Sitzungsnamen kennen, können Sie ihn einfach als Argument zu dieser Befehlszeile hinzufügen.
Byobu ist eine schöne Verbesserung. Es basiert auf dem Bildschirm , bietet jedoch eine Leiste am unteren Rand, in der alle aktuellen Sitzungen als Registerkarten angezeigt werden und die das Navigieren in diesen einfacher macht. Sie können:
HINWEIS : Vermeiden Sie es, eine Sitzung mit dem Benutzer root zu eröffnen . Wenn jemand Zugriff auf Ihr Terminal erhält (lokal oder remote), kann er problemlos eine neue Verbindung zu einer laufenden Sitzung herstellen und Ihr System als Root verwenden. Bei Bedarf ist es am besten, eine Sitzung mit einem gemeinsamen Benutzer und sudo- spezifischen Befehlszeilen zu starten .
quelle
Sie können zwar keine erneute Verbindung zu einer unterbrochenen SSH-Sitzung herstellen, aber Sie können den in SSH ausgeführten Prozess erneut ausführen - funktional entsprechend Ihren Anforderungen.
Anleitung
In Ihrem Fall würden Sie den
apt-get
zu steuernden Prozess von einer neuen SSH-Sitzung,screen
Sitzung oder dergleichen übernehmen. Mein Favorit dafür ist derreptyr
Befehl:Dann mit der PID, die Sie für Ihren Prozess gefunden haben:
Oder wenn das nicht funktioniert, versuchen Sie:
Nach dieser Phase wird Ihre gesamte Tastatureingabe an das von Ihnen übernommene Programm gesendet. Leider wird die alte Ausgabe der SSH-Sitzung nicht angezeigt, z. B. die
apt-get
Ausgabe, in der Sie um Bestätigung gebeten werden.Erklärungen
Es gibt mehrere andere Tools, die grundsätzlich genauso funktionieren wie
reptyr
(ptrace
dh über einen Debug-Anhang). Sehen Sie sich die folgenden Fragen und Antworten an, wo sie besprochen werden:In den obigen Anweisungen, die
reptyr 10626
Anwendungenptrace
Debug - Befestigung während dessudo reptyr -T 10626
verwendeten Befehls stiehlt TTY und ist bevorzugt ( Details ).Der Grund, warum Sie eine SSH-Sitzung nicht auf diese Weise übernehmen können, ist, dass ein
sshd
Prozess nicht von einem Host-Terminal gesteuert wird, sondern den Slave-Teil eines Terminals - ein Gerät - bereitstellt,pts
während sich der Master-Teil, der ihn steuert, auf dem befindet Client-Computer, hier mit einer unterbrochenen SSH-Sitzung dazwischen. Wenn Sie die Übernahme eines solchensshd
Prozesses erzwingenreptyr -s <pid>
, wird Ihre Tastatureingabe an diesen Prozess gesendet, nicht an den aktiven untergeordneten Prozess. Ein "Strg + Z" macht das einfach zunichtesshd
.quelle
Ich habe
do-dist-upgrade
via ssh von einem Laptop aus gearbeitet, der in den Suspend gingBroken pipe
. Beim erneuten Betreten des Computers wurden die auf das Upgrade bezogenen Prozesse noch ausgeführt, darunter einewhiptail
Eingabeaufforderung (welche Anzeige-Manager zur Auswahl stehen) und, was relevant ist, ein Root-ProzessSCREEN
. Ich war in der Lage zu tunsudo su -
undscreen -r
auf die Sitzung und, siehe da, ich habe den whiptail Dialog vor mir der Lage zu nehmen Eingang zu befestigen. Ich konnte das Upgrade nahtlos fortsetzen.Hinweis: Dies war ein Upgrade von Ubuntu 14.04 auf 16.04.
quelle