Назад | Перейти на главную страницу

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

Я пытаюсь перезапустить Supervisor через свой Ansible Playbook, но, похоже, наткнулся на проблему с модулем супервизора для 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.

В supervisorctl Модуль Ansible не поддерживает 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. Это значительно упрощает установку и обслуживание.