Ansible не может перезапустить Supervisor

8

Я пытаюсь перезапустить Supervisor через мою Ansible Playbook, но мне кажется, что я сталкиваюсь с проблемой с модулем Supervisor для Ansible.

В моем конфиге Supervisor я определил программу:

[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

И это прекрасно работает. Однако, когда я пытаюсь перезапустить Supervisor через Ansible, я получаю следующую ошибку:

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

Моя конфигурация Ansible задачи выглядит так:

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

Для nameпараметра я пытался program:process, program, program:и , processно никто не похоже на работу. Я в настоящее время на Ansible 1.5.4.

Люк
источник
1
Первое, что нужно сделать, это обновить Ansible. Там практически нет причин, почему вы должны быть на такой старой версии.
Майкл Хэмптон
Это стандартная версия, которая поставляется с Ubuntu 14.04 LTS. Я понимаю, что это немного устарело, но ничто в руководстве Ansible в отношении модуля Supervisor не указывает на то, что я должен обновить (кроме имени группы, которое меня не интересует). Конечно, в более новой версии могут быть исправлены ошибки, но то, что я пытаюсь сделать, кажется довольно примитивным, что не последняя версия должна быть в состоянии справиться с этим.
Люк
Я вполне уверен, что для этого вам нужен Ansible 1.6 или более поздней версии, так как именно тогда была добавлена ​​групповая поддержка. Даже Red Hat отслеживает последнюю стабильную версию (они в настоящее время на 1.9.4), поэтому я не знаю, что здесь происходит с Ubuntu. Конечно, в Red Hat вы можете просто использовать systemd и забыть обо всем этом.
Майкл Хэмптон
Не беспокойся. Это документация, которую я ухожу: docs.ansible.com/ansible/supervisorctl_module.html
Люк,
Правильно, и это та же самая страница, которая отмечает, что вам нужно 1.6!
Майкл Хэмптон

Ответы:

9

Модуль supervisorctlAnsible не поддерживает reloadкоманду ( см. Здесь ), которая необходима супервизору для получения новых записей конфигурации.

Вы можете сделать это самостоятельно так:

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

Документация по перезагрузке / перечитыванию / обновлению / перезапуску, кажется, отсутствует, и это сообщение в блоге устарело ; Вы можете экспериментировать, чтобы убедиться, что reloadделает то, что вы ожидаете.

Наконец, не помещайте определения вашей программы в supervisord.conf . Вместо этого поместите их как отдельные файлы в /etc/supervisor/conf.d/*.conf. Это значительно облегчает установку и обслуживание.

tedder42
источник
2
Спасибо за это. Однако высоко ценится, это не имеет значения. supervisorctlЗадача еще не удается , потому что он не может ссылаться / найти program:process. Кажется, это проблема в этом модуле Ansible (и да, я не помещаю свои определения программ внутрь, supervisord.confа они загружаются из внешних confфайлов). В конце концов, я пошел с простой командой Ansible, полностью обойдя модуль Supervisor: command: supervisorctl -c /etc/supervisor/supervisord.conf restartи это работает отлично.
Люк
это работает без -c@luke?
tedder42