Terraform local-exec不能在后台运行命令。

问题描述 投票:0回答:1

本帖有一个远程执行的解决方案。如何使用Terraform provisioning启动远程服务?

我想用local-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};

有什么办法吗?

terraform
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.