2017-10-20 5 views
0

J'ai une application qui exécute plusieurs scripts Python dans l'ordre. Je peux les exécuter dans docker-Compose comme suit:Commande bash multiple dans Nomad

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

Maintenant, je suis, planifier le travail à Nomad, et a ajouté la commande ci-dessous sous la configuration pour le pilote Docker:

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

Mais Nomad semble pour échapper &&, et exécute simplement le premier module et émettre le code de sortie 0. Existe-t-il un moyen d'exécuter la commande multiligne similaire à docker-composer?

+0

Le '' && est passé comme un argument supplémentaire à la coque, non pas comme code à exécuter. –

Répondre

1

Ce qui suit est garanti pour fonctionner avec le pilote exec:

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 
] 

Notez que qu'un seul argument est passé comme un script - celui qui suit immédiatement -c. Les arguments suivants sont arguments de ce script, pas de scripts ou fragments de script supplémentaires.


Encore plus simple, vous pouvez exécuter:

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

Salut, merci, j'ai essayé, mais l'une ou l'autre des méthodes aboutit au code de sortie 2: 'Code de sortie: 2, Message de sortie:" Conteneur Docker avec un code de sortie non nul: 2 "' – seemvision

+0

Je ne suppose pas le faire '-xc' plutôt que' -c' (donc les commandes de journalisation s'exécutent sur stderr) pourrait être éclairant? –

+0

(Sans un journal indiquant le contraire, "code de sortie: 2" signifie que l'un des modules Python a été démarré avec succès, puis quitté avec ce statut en raison d'une différence d'environnement ou d'installation entre votre environnement précédent et celui-ci.) –