Wie kann ich die Jobwarteschlange in lftp anzeigen, nachdem sie in einen Hintergrundprozess verschoben wurde?

8

Ich habe gerade angefangen, lftp für die Fernübertragung von Dateien auf meinem Raspberry Pi zu verwenden, auf dem Debian ausgeführt wird. Ich weiß , wie die Dateien zu übertragen, und die Verwendung queueund jobszum Hinzufügen und Ansicht der Übertragung von Dateien.

Ich bin mir jedoch nicht sicher, wie ich diese Übertragungen anzeigen soll, wenn lftp in den Hintergrund tritt. In der lftp-Manpage wird erwähnt, wie sich lftp in den Hintergrund bewegt. Wenn ich jedoch eine neue Instanz des Programms über Shell und Typ öffne jobs, ist die Warteschlange leer. Mit meinem Dateimanager kann ich jedoch deutlich erkennen, dass die Übertragungen noch stattfinden, da die Dateien vorhanden sind und an Größe zunehmen.

Ich vermute, dass beim erneuten Öffnen von lftp nur eine neue Instanz geöffnet wird, die nicht mit dem nohupModus lftp verbunden ist, in dem sich die aktive Warteschlange befindet. Ich habe versucht, verschiedene Orte zu durchsuchen, aber sonst scheint niemand dieses spezielle Problem zu haben.

Ich denke, ich frage in zweierlei Hinsicht:

  1. Gibt es eine Möglichkeit, einfach eine Verbindung zum Hintergrund-LFTP-Prozess herzustellen, um die aktuelle jobsListe anzuzeigen ?

  2. Wenn nicht, gibt es eine Möglichkeit, dies überhaupt anzuzeigen?

drpfenderson
quelle

Antworten:

12

Sie haben Recht, dass Instanzen von lftp die Jobwarteschlange nicht gemeinsam nutzen, was natürlich der Funktionsweise der Shell-Jobwarteschlange ähnelt.

Dennoch kann lftp tatsächlich an eine vorhandene Hintergrundsitzung angehängt werden. Laut dem Verlauf der lftp-News- Version wurde die Funktion in Version 4.3.0 (2011-06-17) eingeführt. Wenn Ihre Verbindung zur LFTP-Sitzung getrennt wird oder Sie mit laufenden Übertragungen im Hintergrund beenden, können Sie in neueren Versionen den Hintergrund-LTP-Prozess weiterhin fortsetzen und auf die Jobwarteschlange zugreifen.

Von der lftp-Manpage:

[ PID ] anhängen

Schließen Sie das Terminal an den angegebenen lftp-Prozess im Hintergrund an.

Dazu müssen Sie die Prozess-ID PID des Hintergrund-LFTP-Prozesses kennen. Ein einfacher Weg, dies zu tun, ist der Befehl pgrep, der übereinstimmende Prozess-IDs auflistet.

Zum Beispiel habe ich hier eine Übertragung in lftp im Hintergrund:

lftp remote:/path> get oi-dev-151a-x86.iso 
[0] get oi-dev-151a-x86.iso &                                             
     `oi-dev-151a-x86.iso' at 655360 (0%) 296.1K/s eta:46m [Receiving data]
lftp remote:/path> exit
[82106] Moving to background to complete transfers...

Dies listet die PID auf, die zum Anhängen benötigt wird, aber falls wir diese nicht notiert haben, können wir sie mit pgrep wiederfinden:

$ pgrep lftp
82106

Und hier setzen wir das Hintergrund-Lftp fort:

$ lftp
lftp :~> attach 82106
[82106] Attached to terminal.
lftp remote:/path> jobs
[0] get oi-dev-151a-x86.iso 
    `oi-dev-151a-x86.iso' at 42827776 (5%) 1.49M/s eta:10m [Receiving data]

Die stabile Debian-Version verfügt möglicherweise nicht über die Funktion zum Anhängen, Sie können jedoch die aktiven lftp-Prozesse mit pgrep auflisten.

joneskoo
quelle
Dies ist absolut richtig, obwohl ich diese Tatsache sehr spät kommentiere. Vielen Dank. Für diejenigen, die später kommen, hat pgrep für mich eigentlich nicht funktioniert. Ich musste "ps aux | grep lftp" verwenden, da (aus irgendeinem Grund) pgrep manchmal keinen Wert zurückgab, wenn lftp mit Sicherheit ausgeführt und mit ps aux gefunden wurde.
Drpfenderson
Wenn parallele Chunk-Downloads (auch bekannt als) initiiert wurden pget, können Sie einfach die generierte Datei (die neben der eigentlichen Datei gespeichert ist) katzen, um die Suchpositionen anzuzeigen. Nicht sehr hilfreich, gibt Ihnen aber einen Hinweis.
Mohnish
1

Von der lftp-Manpage :

If  you exit lftp when some jobs are not finished yet, lftp will move itself to
nohup mode in background. The same happens when you have a real modem hangup or
when you close an xterm.

Sie können keine Verbindung zu Hintergrundprozessen herstellen, die mit nohup ausgeführt werden, wenn der übergeordnete Prozess beendet wurde.

Yedric
quelle
1

Von der lftp-Manpage gesammelt: Verwenden Sie diese Option ctrl-z, um den Prozess in den Hintergrund zu verschieben und zu lftpbeenden wait. Starten Sie später lftp erneut und geben Sie ein .

1398
quelle
Wie oben erwähnt, ist es beim Beenden von lftp möglich, die PID des laufenden lftp-Prozesses ( pgrep lftp) zu ermitteln, dann lftperneut auszuführen , dann zu tun attach <PID>, dann waitund so weiter.
Milan Kerslager