0

配置实例时,我使用“remote-exec”执行一些命令,然后通过 terraform 启动一个 tomcat 实例。它看起来像这样:

resource "null_resource" "mount_fss_on_DFSrvr" {
depends_on = ["oci_core_instance.DFSrvr",
  "oci_file_storage_export.export_FileListener_FileListenerMount",
]

count = "${var.proddfsrvr_count}"

provisioner "remote-exec" {
  connection {
    agent       = false
    timeout     = "15m"
    host        = "${oci_core_instance.DFSrvr.*.public_ip[count.index % var.proddfsrvr_count]}"
    user        = "opc"
    private_key = "${file(var.ssh_private_key)}"
  }

  inline = [
   "some commands",
    "./catalina.sh start",
    "exit"
  ]
}

}

输出显示 tomcat 已启动,但是当我查看实例时,日志显示它尚未启动(没有日志记录)。我可以 ssh 进入实例并运行“./catalina.sh start”,它工作正常。我还尝试在 remote-exec 内联命令中创建服务并运行“sudo service tomee start”而不是“./catalina.sh start”,但这也不起作用。我在这里做错了什么?

  null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Using CATALINA_BASE:   /apache-tomee-plus-7.0.4
null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Using CATALINA_HOME:   /apache-tomee-plus-7.0.4
null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Using CATALINA_TMPDIR: /apache-tomee-plus-7.0.4/temp
null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Using JRE_HOME:        /usr
null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Using CLASSPATH:       /apache-tomee-plus-7.0.4/bin/bootstrap.jar:/apache-tomee-plus-7.0.4/bin/tomcat-juli.jar
null_resource.mount_fss_on_DFSrvr[1] (remote-exec): Tomcat started.
4

2 回答 2

2

我遇到了同样的问题,但是在运行 python 网络应用程序时。我想这里的问题是当你通过 remote-exec 运行命令时,一旦完成它就会退出 shell。因此,当您 ssh 进入通过新外壳打开的机器时,您应该在命令前加上 nohup 前缀,我相信这应该可以解决问题。但这对我来说是这样。如果您希望它在后台运行并退出远程执行,请使用 &。此外,您可能希望在内联命令中添加“sleep 20”,这将使 tomcat 有时间在配置程序退出之前启动。

inline = [ "一些命令", "nohup ./catalina.sh start &", "sleep 20", ]

于 2019-01-16T19:47:41.050 回答
1

尝试给它绝对路径,而不是./source ~/tmp/catalina.sh. 它可能不会从你想的地方开始。

第二删除exit线。它可能在安装完成之前退出。有些事情在写入磁盘之前完成。你也可以试试source ~/path/catalina; sync

另外,这是否需要 sudo 权限?

于 2018-11-02T20:43:07.747 回答