2016-06-29 1 views
0

J'écris une tâche ansible qui est similaire à ce qui suit,Utilise nohup avec le module shell (ou commande) dans idempotent ansible?

- name: Start daemon 
    shell: nohup myexeprogram arg1 arg2 & 

(ref: https://stackoverflow.com/a/29818158/198660)

La tâche est-idempotent ci-dessus? c'est-à-dire l'exécuter de manière répétée finira par créer plusieurs instances de myexeprogram sur le système ou en créera-t-on une seule?

Si le premier (c'est-à-dire une nouvelle instance est créée pour chaque exécution de tâche), est-il possible d'écrire un jeu utilisant cette tâche pour être idempotent? Peut-être exécuter une sorte de recherche & kill commande pour toutes les instances existantes avant de commencer un nouveau? Des exemples (tâches annuelles) seront appréciés. Je suis en train de configurer un serveur prometheus avec ansible sur un système centos7.

+0

Il vaudra beaucoup mieux écrire un fichier d'unité pour le service Prometheus et utiliser le module de service avec Ansible. –

+0

@knowhy le module de service d'ansible est principalement construit autour de systemv, que prometheus supporte, mais centos7 s'est éloigné de cela dans systemd, donc l'utilisation du module de service n'est pas une option pour moi. – chronodekar

+0

Je n'ai pas regardé le code. Je n'ai jamais eu de problèmes avec le module de service et systemd. J'ai seulement besoin du module de commande de 'daemon-reload' pour activer le fichier d'unité. Systemd est supporté par le module. –

Répondre

1

Non cette tâche ne sera pas idempotente. Il générera une nouvelle instance à chaque exécution.

Vous pouvez le rendre idempotent en utilisant une autre tâche pour vérifier un processus en cours existant et en utilisant un 'quand' conditionnel à cette tâche pour éviter de courir si un processus est déjà en cours d'exécution. Cela signifie que la démonétisation du programme et l'utilisation du module 'service' constituent un meilleur modèle que l'utilisation de la commande et du nohup.