2016-03-24 21 views
3

Ich möchte meine Terraform-Konfiguration einen Server bereitstellen und starten Sie den Dienst am Ende durch einen Befehl aufrufen und führen Sie es weiter. Ich habe versucht, nohup und Bildschirm mit über Remote-exec:Wie kann ich einen Remote-Dienst mit Terraform Provisioning starten?

nohup:

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

}

Bildschirm:

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

ich überprüfen, ob die Befehle, indem Sie sich manuell ausgeführt werden. Aber sie lassen keinen Prozess laufen. Diese Befehle funktionieren, wenn ich sie manuell ausprobiere und sie mit ssh aufrufen.

Wie kann ich Terraform Provisioning verwenden, um einen Befehl zu starten und ihn beim Zurückgeben des Steuerungsflusses weiterlaufen zu lassen?

+0

Haben Sie dies über Benutzerdaten anstelle von Remote-Exec versucht? Nicht sicher, warum Remote-Exec nicht funktionieren würde, aber Benutzerdaten können einen anderen Weg bieten. –

Antwort

10

Versuchen Sie, einen Schlaf nach Ihrem Nohup hinzuzufügen. Arbeitete für mich. Ich vermute, Hintergrundinformationen zu Ihrem letzten Remote-Exec lassen Terraform damit davonkommen, die Verbindung herunterzufahren, bevor der Kind-Prozess eine Chance hat, trotz des Nohups zu starten.

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

Dies sollte die akzeptierte Antwort sein. Es hat mir gut funktioniert. –

+0

Dieser Trick funktioniert definitiv! – RubyFanatic