Search code examples
terraformgnu-screennohup

How can I start a remote service using Terraform provisioning?


I want my Terraform config to provision a server and start the service at the end by invoking a command and keep running it. I tried using nohup and screen using remote-exec:

nohup:

provisioner "remote-exec" {
 inline = "nohup sudo command &"
}

screen:

provisioner "remote-exec" {
 inline = "screen -d -m sudo command"
}

I check if the commands are running by logging in manually. But they do not keep a process running. These commands do work if I try them manually and invoking them with ssh also works.

How can I use Terraform provisioning to start a command and keep it running while returning control flow?


Solution

  • Try adding a sleep after your nohup. Worked for me. I suspect backgrounding your last remote-exec lets Terraform get away with shutting down the connection before the child process has a chance to start up, despite the nohup.

    provisioner "remote-exec" {
        inline = [
            "nohup sudo command &",
            "sleep 1"
        ]
    }