这是我的一般问题:如何登录远程服务器,启动连续运行的进程,将该进程的标准输出重定向到本地计算机上的文件,并使所有这些在后台运行(在本地计算机上)机器)?
更具体地说,我试图将 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
,这将在身份验证和其他潜在交互步骤之后将命令发送到后台。