fragen stichworte

STDOUT kann in einer Remote-Bildschirmsitzung nicht über SSH umgeleitet werden

Ich möchte einen lang laufenden Befehl über SSH/screen ausführen und die Ausgabe in eine Datei umleiten lassen. Ich kann den Befehl fein ausführen (ähnlich wie diese Frage), aber die Ausgabe wird nie angezeigt.

Hier ist mein aktueller Befehl:

ssh user@host screen -dm "ping -c 20 -i 5 localhost >/tmp/ping.out"

Auf dem Remote-Host kann ich die Sitzung sehen:

> screen -ls
There is a screen on:
        4530..com001     (Detached)
1 Socket in/var/run/screen/S-root.

Und verbinden Sie sich, um die Live-Ausgabe anzuzeigen, die erwartungsgemäß mit dem Befehl ping beendet wird:

PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.071 ms
..

Alles macht genau das, was ich brauche, mit Ausnahme der Dateiumleitung: ssh auf dem lokalen Host trennt sich sofort, der Befehl wird live in einer Bildschirmsitzung auf dem fernen Host ausgeführt (Ich kann eine Verbindung zur Bildschirmsitzung herstellen und sehen, wie mein Ping ausgeführt wird) Die Bildschirmsitzung wird beendet, sobald der Ping-Befehl abgeschlossen ist. Die Datei/tmp/ping.out wird sogar auf dem Remote-Host erstellt! Die Anzeige bleibt jedoch in der Bildschirmsitzung und wird nicht zur Datei umgeleitet.

Was fehlt mir hier?

(Übrigens, der Ping dient nur zum Testen. Eventuell möchte ich einen 1 - 2-Minuten-Tcpdump parken und die Ausgabe im Hintergrund zur Fehlerbehebung sammeln).

antworten

Bildschirmausgabe ist nicht genau das, was Sie erwarten, da es als Multiplexer ausgelegt ist. Befehl, nach dem Sie suchen, ist:

ssh user@host screen -d -m "sh -c 'ping -c 20 -i 5 localhost >/tmp/ping.out'"

Dieser Befehl erzeugt eine neue Shell & amp; Arbeiten wie vorgesehen.