3

所以我有一个类似于如何将 ssh 作业发送到后台的问题。

我有一个 Windows c# 程序自动使用http://sshnet.codeplex.com/在远程 linux 操作系统上执行 tcpdump 。我正在尝试在远程 linux 上执行 tcpdump 并在断开连接后让它运行。

我一直在使用 plink 进行大量调试,但似乎无法达到预期的结果。我试过了:

plink root@10.5.1.1 bash -c "tcpdump -i eth0 -w test.cap"

但它持有 sshclient 直到我 ctrl+C (不适用于自动化解决方案)。我还尝试了以下变体:

plink root@10.5.1.1 bash -c "tcpdump -i eth0 -w test.cap &"

但是该命令根本不执行(test.cap 不存在)或立即终止(test.cap 包含 1 行)。在测试期间,我留下了一个 ping,所以捕获应该有一些 东西......

前面提到的链接解决了screen的问题,但是远程 linux os 是不可配置的并且没有screen。欢迎任何建议。

4

6 回答 6

5

在后一种情况下,您的tcpdump进程可能会在您断开连接时中止。尝试:

plink root@10.5.1.1 bash -c "nohup tcpdump -i eth0 -w test.cap &"

请参阅手册页nohup。您可能还需要考虑将 stdout 和 stderr 重定向到文件或/dev/null防止nohup将输出写入文件:

plink root@10.5.1.1 bash -c "nohup tcpdump -i eth0 -w test.cap >/dev/null 2>&1 &"
于 2012-07-17T18:42:21.433 回答
2

我在启动远程应用程序时遇到了类似的问题。这种模式在 Debian 服务器上对我有用:

ssh root@server "nohup /usr/local/bin/app -c cfg &; exit"

另外: 对于另一项测试,上述方法不起作用,即。该命令未在远程服务器上启动。添加一个在退出之前成功返回的命令似乎有效。

ssh root@server "nohup /usr/local/bin/otherapp &; w; exit"
于 2012-08-18T03:06:03.247 回答
1

我有类似的情况:(在 Windows 机器上)我想创建一个 ms 批处理脚本来打开到树莓派的 SSH 连接并在后台执行本地脚本。我发现结合 Raj 和 fahd 的答案对我有用:

我的 ms 批处理脚本:

plink -load "raspberry Pi" -t -m startCommand.txt

startCommand.txt的内容如下:

nohup /home/pi/myscript >/dev/null 2>&1 &
w
exit

">/dev/null 2>&1 " 很重要!我发现(困难的方式)RPi 的 SD 卡通过一个非常大的 nohup.out 文件不断变满(并且使用完整的 SD 卡,RPi 甚至无法正确登录)

推理:

我使用 -load 在 PuTTY 中加载保存的会话(我这样做是因为我使用公钥/私钥而不是密码进行身份验证,但这应该与简单地输入主机相同)

然后 -t (由 Raj 推荐)

然后 -m 加载该文件中的命令列表

如果没有参数“-t”并且没有“w”和“exit”,我的批处理脚本只会运行,不会执行“myscript”并再次关闭。

于 2017-05-10T20:42:08.700 回答
0

我遇到过同样的问题。我有一个脚本,其中我有 nohup tcpdump .... & 。我无法使用 ssh 运行它,因为它在 ssh 完成时死掉了。我想出的解决方案非常简单。我刚刚将 sleep 5 添加到脚本的末尾,它工作得很好。即使使用 nohup,在退出之前 tcpdump 似乎也需要几秒钟才能安全地进入后台。

于 2013-12-28T00:46:45.180 回答
0

我遇到了同样的问题,我发现“-t”选项似乎对 nohup 很重要。我发现没有“-t”选项 nohup 不会生效。

ssh -t user@remote 'nohup tcpdump -i any -w /tmp/somefile &>/dev/null & sleep 2'

于 2014-03-06T01:46:47.710 回答
0

我认为我已经做到了,至少在 IBM AIX 中

我在用着

ssh -tq user@host "/path/start-tcpdump.ksh"

(身份验证由公钥完成)。我使用简单的“nohup tcpdump .... &”得到了不一致的结果,有时它有效,有时它没有,有时它甚至阻塞,我不得不断开会话。到目前为止,这一切正常,我真的不能说为什么它会起作用,但它是......

这是我的 start-tcpip.ksh

#!/usr/bin/ksh
HOST=$(uname -n)
FILTER="port not 22"
(tcpdump -i en1 -w $HOST-en1.cap $FILTER >/dev/null 2>&1 ) &
sleep 2
(tcpdump -i en2 -w $HOST-en2.cap $FILTER >/dev/null 2>&1 ) &
sleep 2
exit 0
于 2014-06-05T22:57:37.907 回答