2017-10-20 4 views
0

Ich habe eine Anwendung, die mehrere Python-Skripts in Reihenfolge ausführt. Ich kann sie in laufen Docker-komponieren wie folgt:Mehrere Bash-Befehl in Nomad

command: > 
    bash -c "python -m module_a && 
    python -m module_b && 
    python -m module_c" 

Jetzt bin ich, die Planung der Arbeit in Nomad, und hinzugefügt, um die unter Befehl unter Konfiguration für Docker Treiber:

command = "/bin/bash" 
args = ["-c", "python -m module_a", "&&"," 
     "python -m module_b", "&&", 
     "python -m module_c"] 

Aber Nomad scheint zu entkommen &&, und führt nur das erste Modul, und geben Sie Exit-Code 0 aus. Gibt es eine Möglichkeit, den mehrzeiligen Befehl ähnlich wie Docker-Compose auszuführen?

+0

Der '' && wird als zusätzliches Argument an die Shell übergeben, nicht als Code auszuführen. –

Antwort

1

Hier finden Sie garantiert mit dem exec Fahrer arbeiten:

command = "/bin/bash" 
args = [ 
    "-c",             ## next argument is a shell script 
    "for module; do python -m \"$module\" || exit; done", ## this is that script. 
    "_",             ## passed as $0 to the script 
    "module_a", "module_b", "module_c"      ## passed as $1, $2, and $3 
] 

Beachten Sie, dass nur ein einziges Argument als Skript übergeben wird - die man sofort -c folgen. Nachfolgende Argumente sind Argumente zu diesem Skript, keine zusätzlichen Skripte oder Skriptfragmente.


Noch einfacher können Sie laufen:

command = "/bin/bash" 
args = ["-c", "python -m module_a && python -m module_b && python -m module_c" ] 
+0

Hey, danke, ich habe es tatsächlich versucht, aber beide Methoden führen zu Exitcode 2: 'Exitcode: 2, Exit Message:" Dockercontainer beendet mit Nicht-Null Exitcode: 2 "' – seemvision

+0

Ich nehme nicht an, es zu machen '-xc' anstatt' -c' (Protokollierungsbefehle, die auf stderr laufen), könnten aufschlussreich sein? –

+0

(Ohne ein anderes Protokoll könnte "exit code: 2" bedeuten, dass eines der Python-Module erfolgreich gestartet und dann aufgrund eines Umwelt- oder Installationsunterschieds zwischen Ihrer vorherigen Umgebung und diesem Status beendet wurde.) –

Verwandte Themen