SSH 注销后保持进程活动

SSH 注销后保持进程活动

我正在尝试测量无线 802.11s 网状连接上两台计算机之间的带宽、数据包丢失、延迟和抖动。

我正在尝试编写一个(我的第一个) bash 脚本,它可以执行以下操作:

  1. 通过 SSH 连接到另一台计算机并开始从服务记录数据(ptpdtcpdumpiperf)。
  2. 在自己的计算机上启动相同的进程并开始记录数据。
  3. 一旦iperf我自己的计算机上的传输完成,它应该通过 SSH 进入远程计算机并终止服务。

这个想法是,这三个步骤在 for 循环中运行,每次迭代都会增加 iperf 传输的包大小并记录结果数据。

我知道如何通过 在远程电脑上启动一个进程ssh host@adress process

但是,我不知道如何通过 SSH 启动多个进程并注销,因为一旦我注销,进程就会终止。我查看了screennohup命令,但不知道如何在脚本中使用它们。

提前致谢!

编辑:

感谢您迄今为止提供的所有帮助。

我现在让 nohup 工作了,正如人们指出的那样,它非常简单。所以现在我ssh host@adress nohup ./script.sh > /dev/null 2>&1 &在主 PC 上的脚本中得到了:。这可以很好地在远程 PC 上启动一个脚本,然后注销 SSH。下一个问题是如何以 sudo 身份在远程 PC 上执行脚本,因为这是 tcpdump 所需要的。

尝试ssh host@adress **sudo** nohup ./script.sh > /dev/null 2>&1 &沒有效果。

有任何想法吗?

编辑2:

如果有人遇到同样的问题,我找到了解决此问题的指南:

http://www.pantz.org/software/ssh/using_ssh_and_sudo_instead_of_root_for_remote_commands.html

答案1

使用screen

一些有用的快捷方式:

  • ctrl+a+c:创建一个新的“窗口”
  • ctrl+a+n:转到下一个“窗口”
  • ctrl+a+p:转到上一个“窗口”
  • ctrl+a+d:分离会话(它继续运行)

分离后,使用screen -r恢复会话。screen -x如果屏幕会话未分离,但以其他方式进入后台(或实际上仍在另一个终端上运行),也有此情况。

2021 年编辑:考虑tmux以及作为的更好替代方案screen

或者,对于单个过程,nohup—如其他答案中提到的那样。

答案2

从 a--help开始nohup

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

只需在命令&中添加一个nohup <whatever you want to run>。这意味着除非您专门终止生成的nohup进程,否则它永远不会消失。

您可以使用screen或完全跳过 nohup,我听说即使与远程主机的连接断开,它也会保持进程运行(这是它的一个相当了不起的优势)。不过,我不知道如何做到这一点,所以您需要在下载后执行/tmux来自己阅读。man screenman tmux

答案3

您可以在程序前面加上nohup

例如nohup myprogram &。这将启动程序并将所有输出发送到名为 nohup.out 的文件。它还会在您注销时捕获 sigHUP。

另一个解决方案是运行screentmux

答案4

答案就在你的问题里。使用screennohup命令。你对如何使用它们有什么不明白的?

尝试

ssh host@address nohup command args &。& 将sshshell 置于本地系统的后台,这意味着隧道ssh将尽可能长时间地保持。但是,如果本地进程因任何原因终止或失去与远程主机的连接,该nohup命令将阻止command远程系统上的运行终止。ssh

相关内容