Я хотел бы выполнить длительную команду через 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'"
Эта команда создаст новую оболочку и будет работать по назначению.