我想通过 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),并且屏幕会话在 ping 命令完成后立即终止。 /tmp/ping.out 文件甚至在远程主机上创建!但显示停留在屏幕会话中,而不是重定向到文件。
我在这里遗漏了什么?
(顺便说一句,ping 只是为了测试。最后我想停放 1 - 2 分钟的 tcpdump 并在后台收集输出以进行故障排除)。
答案1
屏幕“输出”并不完全符合您的预期,因为它被设计为多路复用器。您正在寻找的命令是:
ssh user@host screen -d -m "sh -c 'ping -c 20 -i 5 localhost > /tmp/ping.out'"
此命令将生成一个新的 shell 并按预期工作。