Назад | Перейти на главную страницу

Невозможно перенаправить STDOUT в сеансе удаленного экрана через SSH

Я хотел бы выполнить длительную команду через SSH / screen и перенаправить вывод в файл. Я могу нормально запустить команду (аналогично этот вопрос), но результат никогда не появляется.

Вот моя текущая команда:

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

На удаленном хосте я вижу сеанс:

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

И прикрепите для просмотра живого вывода, который завершается, как ожидалось, командой ping:

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
..

Все делает именно то, что мне нужно, кроме перенаправления файла: ssh на локальном хосте немедленно отключается, команда выполняется в реальном времени в сеансе экрана на удаленном хосте (я могу подключиться к сеансу экрана и увидеть, как работает мой пинг), и экран сеанс завершается, как только команда ping завершается. Файл /tmp/ping.out создается даже на удаленном хосте! Но дисплей остается в сеансе экрана, а не перенаправляется в файл.

Что мне здесь не хватает?

(Кстати, пинг предназначен только для тестирования. В конце концов, я бы хотел оставить 1–2-минутный tcpdump и собрать вывод в фоновом режиме для устранения неполадок).

«Вывод» экрана - это не совсем то, что вы ожидаете, поскольку он разработан как мультиплексор. Команда, которую вы ищете:

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

Эта команда создаст новую оболочку и будет работать по назначению.