当前位置: 首页 > 知识库问答 >
问题:

Terraform local exec无法在后台运行命令

拓拔阎宝
2023-03-14

这篇文章为远程执行提供了一个解决方案:如何使用Terraform配置启动远程服务?

我正在尝试对本地exec provisioner执行相同的操作。

我需要在远程节点上打开ssh隧道:

  #create remote SSH reverse tunnel
  provisioner "local-exec" {
    command = <<EOT
      ssh-keygen -f "$HOME/.ssh/known_hosts" -R "${self.ip}";
      nohup ssh -oStrictHostKeyChecking=no -N -R ${var.chef_zero_port}:localhost:${var.chef_zero_port} ${var.ssh_username}@${self.ip} -M -S /tmp/.ssh_to_${self.ip} &
      sleep 2
    EOT
    interpreter = ["/bin/bash","-c"]
  }

隧道已创建,但Terraform不会继续下一步。

如果我将ssh命令替换为:

ssh -oStrictHostKeyChecking=no -fN -R ${var.chef_zero_port}:localhost:${var.chef_zero_port} ${var.ssh_username}@${self.ip} -M -S /tmp/.ssh_to_${self.ip};

有什么想法吗?

共有1个答案

钱志强
2023-03-14

Terraform正在等待所有子进程退出。nohup正在从终端分离,但它仍然是一个子进程。尝试使用disown将子进程移动到init(进程1)。

 类似资料:
  • 本文向大家介绍在Linux中后台运行命令,包括了在Linux中后台运行命令的使用技巧和注意事项,需要的朋友参考一下 要了解何时使用Linux,一种有用的技术是在后台运行命令。有时某些命令可能要花一些时间(例如复制大文件),或者在运行时仅接管终端窗口。例如,假设您在gedit中打开文件,则可以使用以下命令。 gedit file.txt 这样做将在gedit中打开文件,但在关闭gedit之前不允许您

  • 在linux中,您可以使用命令

  • Linux 命令放入后台的方法有两种,分别介绍如下。 "命令 &",把命令放入后台执行 第一种把命令放入后台的方法是在命令后面加入 。使用这种方法放入后台的命令,在后台处于执行状态。 注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的。例如: [root@localhost ~]#find / -name install.log & [1] 1920 #[工作号] 进程号 #

  • 本文向大家介绍怎么使一个命令在后台运行?相关面试题,主要包含被问及怎么使一个命令在后台运行?时的应答技巧和注意事项,需要的朋友参考一下 答案: 一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格)

  • 问题内容: 我有以下代码行可运行批处理文件, 但是我希望它在后台运行,而不是向用户显示命令行。我该如何更改才能做到这一点? 问题在于命令窗口打开并中断程序GUI。我只希望命令窗口在执行批处理文件时不可见。 问题答案: 完全删除“开始”将完成您想要的操作(因为这就是创建窗口的原因): 我已经对此进行了测试,并且可以正常工作,当然,如果您想与命令提示符进行通信,则必须具有输入和输出流,也不要忘记您的错

  • 问题内容: 我通常使用以下命令运行多个命令: 要么 但是,如果我想从一个命令行命令在后台同时运行它们呢? 不起作用。而且也没有更换用 有办法吗? 问题答案: 您究竟希望它们如何运行?如果希望它们在后台启动并按 顺序 运行,则可以执行以下操作: 另一方面,如果您希望它们在后台 并行 运行,则可以执行以下操作: 并且可以将两种技术结合起来,例如: 重击就是重击,通常有多种不同的技术可以完成相同的任务,