在后台通过 SSH 重定向正在运行的进程的输出

在后台通过 SSH 重定向正在运行的进程的输出

这是我的一般问题:如何登录远程服务器,启动连续运行的进程,将该进程的标准输出重定向到本地计算机上的文件,并使所有这些在后台运行(在本地计算机上)机器)?

更具体地说,我试图将 tshark 输出从远程 Raspberry Pi 传输到我的本地计算机(实际上是另一台运行 Cygwin 的 Windows 远程计算机 - 长话短说)并将其写入日志文件。我首先运行不带输出重定向的命令:

ssh pi@remotehost "\
sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_epoch"

这似乎正如我所期望的那样工作;我在终端中收到数据流。接下来我尝试添加输出重定向:

ssh pi@remotehost "\
sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_epoch" \
> /var/tshark.out

这似乎也符合预期;我看到标准错误写入终端,在终止进程并检查输出文件 (/var/tshark.out) 后,我看到 tshark 的标准输出。接下来我尝试在我的机器上在后台运行它:

ssh pi@remotehost "\
sudo tshark \
-i wlan1mon \
-I -l -f broadcast \
-Y wlan.fc.subtype==4 \
-T fields \
-e wlan.sa \
-e frame.time_epoch" \
> /var/tshark.out &

不幸的是这并没有达到预期的效果。当我检查输出文件时,它是空的,当我检查作业状态(通过运行“jobs”命令)时,我发现它已停止。这是作业的输出(为了便于阅读,我对其进行了稍微重新格式化):

[1]+  Stopped   ssh pi@remotehost
                "sudo tshark
                -i wlan1mon
                -I -l -f broadcast
                -Y wlan.fc.subtype==4
                -T fields
                -e wlan.sa
                -e frame.time_epoch"
                > /var/tshark.out &

这导致我尝试了远程和本地进程的后台和 nohup 的各种排列,但无济于事。

答案1

使用-f的开关ssh,这将在身份验证和其他潜在交互步骤之后将命令发送到后台。

相关内容