Ansible hat Schwierigkeiten, Supervisor neu zu starten

8

Ich versuche, Supervisor über mein Ansible Playbook neu zu starten, aber ich stoße anscheinend auf ein Problem mit dem Supervisor-Modul für Ansible.

In meiner Supervisor-Konfiguration habe ich ein Programm definiert:

[program:process]
process_name=%(program_name)s_%(process_num)02d
command=/home/box1/workers/bin/process
numprocs=64
directory=/home/box1/workers/bin
autostart=true
autorestart=true
startretries=5
stderr_logfile=/tmp/%(program_name)s-err.log
stdout_logfile=/tmp/%(program_name)s-out.log
user=root

Und das funktioniert gut. Wenn ich jedoch versuche, Supervisor über Ansible neu zu starten, wird die folgende Fehlermeldung angezeigt:

failed: [box1] => {"failed": true}
msg: program:process: ERROR (no such process)
program:process: ERROR (no such process)

Die Konfiguration meiner Ansible-Aufgabe sieht folgendermaßen aus:

- name: Restart Supervisor
  sudo: yes
  supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf

Für den nameParameter Ich habe versucht program:process, program, program:und processdoch keiner scheint zu arbeiten. Ich bin derzeit auf Ansible 1.5.4.

Luke
quelle
1
Als erstes müssen Sie Ansible aktualisieren. Es gibt praktisch keinen Grund, warum Sie eine so alte Version verwenden sollten.
Michael Hampton
Es ist die Out-of-the-Box-Version, die mit Ubuntu 14.04 LTS geliefert wird. Ich verstehe, dass es etwas veraltet ist, aber nichts im Ansible-Handbuch in Bezug auf das Supervisor-Modul weist darauf hin, dass ich aktualisieren sollte (abgesehen von dem Gruppennamen, an dem ich nicht interessiert bin). Zugegeben, eine neuere Version hat möglicherweise Fehlerbehebungen, aber was ich versuche, scheint ziemlich rudimentär, dass keine neueste Version damit umgehen kann.
Luke
Ich bin mir ziemlich sicher, dass Sie dafür Ansible 1.6 oder höher benötigen, da zu diesem Zeitpunkt Gruppenunterstützung hinzugefügt wurde. Sogar Red Hat verfolgt die neueste stabile Version (sie sind derzeit auf 1.9.4), daher weiß ich nicht, was mit Ubuntu hier zu tun hat. Natürlich können Sie auf Red Hat einfach systemd verwenden und all diese Supervisor-Dinge vergessen.
Michael Hampton
Keine Sorge. Dies ist die Dokumentation, die ich gehe: docs.ansible.com/ansible/supervisorctl_module.html
Luke
Richtig, und das ist genau die Seite, auf der Sie 1.6 benötigen!
Michael Hampton

Antworten:

9

Das supervisorctlAnsible-Modul unterstützt den reloadBefehl ( siehe hier ) nicht, den der Supervisor benötigt, um neue Konfigurationseinträge aufzunehmen.

Sie können es selbst so machen:

- command: supervisorctl reread
  sudo: yes
- supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf
  sudo: yes

Die Dokumentation zum Neuladen / erneuten Lesen / Aktualisieren / Neustarten scheint zu fehlen, und dieser Blog-Beitrag ist veraltet . Sie können experimentieren, um sicherzustellen, dass reloadSie das tun, was Sie erwarten.

Schließlich sollten Sie Ihre Programmdefinitionen nicht in die Datei Supervisord.conf einfügen . Fügen Sie sie stattdessen als einzelne Dateien in /etc/supervisor/conf.d/*.conf ein. Das erleichtert die Installation und Wartung erheblich.

tedder42
quelle
2
Dank dafür. Sehr geschätzt, macht es jedoch keinen Unterschied. Die supervisorctlAufgabe schlägt immer noch fehl, da sie die nicht referenzieren / finden kann program:process. Dies scheint ein Problem in diesem Ansible-Modul zu sein (und ja, ich platziere meine Programmdefinitionen nicht im supervisord.confund sie werden aus externen confDateien geladen ). Am Ende ging ich mit einem einfachen Ansible-Befehl vor, der das Supervisor-Modul insgesamt umging: command: supervisorctl -c /etc/supervisor/supervisord.conf restartund das funktioniert perfekt.
Luke
funktioniert es ohne -c, @luke?
Tedder42