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?
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"
]
}