2016-06-03 2 views
1

У меня есть сервер, на котором Supervisord управляет моими процессами. Я обычно начинаю supervisord с помощью следующей команды:Как запустить супервизор с Ansible?

sudo /var/www/imd/venv/bin/supervisord -c /var/www/imd/deploy/supervisord.conf 

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

- name: run supervisord 
    command: "/var/www/imd/venv/bin/supervisord -c /var/www/imd/deploy/supervisord.conf" 

Это работает, но только в первый раз, когда вы его запускаете. Второй раз при запуске же supervisord сценария, конечно, уже работает, что приводит следующее сообщение об ошибке:

TASK [run supervisord] ******************************************************* fatal: [ansible-test1]: FAILED! => {"changed": true, "cmd": ["/var/www/imd/venv/bin/supervisord", "-c", "/var/www/imd/deploy/supervisord.conf"], "delta": "0:00:00.111700", "end": "2016-06-03 11:57:38.605804", "failed": true, "rc": 2, "start": "2016-06-03 11:57:38.494104", "stderr": "Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.\nFor help, use /var/www/imd/venv/bin/supervisord -h", "stdout": "", "stdout_lines": [], "warnings": []}

Кто-нибудь знает, как я могу правильно запустить supervisord с анзиблем? Все советы приветствуются!

[EDIT]

Поскольку решение в ответ по mbarthelemy не работает для сокетов файлов теперь удалось получить его работу со следующим:

- name: run supervisord 
    shell: if [ ! -S /var/run/supervisor.sock ]; then sudo /var/www/imd/venv/bin/supervisord -c /var/www/imd/deploy/supervisord.conf; fi 

Это, конечно, не очень "ansibleish". Если у кого-то есть реальное решение на основе Ansible, которое по-прежнему будет действительно приветствоваться.

ответ

1

Ваша ситуация специфична, поскольку вы, похоже, не используете обычный супервизор, установленный как обычный системный пакет; в этом случае вы должны запустить/остановить/перезапустить его, как и любую другую обычную системную службу, используя модуль Ansible service.

По умолчанию при запуске Supervisor создает сокет для прослушивания команд администрирования от supervisorctl. Когда он останавливается, он должен удалить его.

Попробуйте найти, где этот сокет создан в вашей конкретной настройке (по умолчанию будет /var/run/supervisor.sock). Затем пусть модуль Ansible command знает, что если процесс Suopervisord уже запущен, гнездо существует, используя опцию creates (documentation). Таким образом, он не будет пытаться запустить command, если он уже запущен:

- name: run supervisord 
    command: "./venv/bin/supervisord -c ./deploy/supervisord.conf" 
    args: 
    chdir=/var/www/imd 
    creates=/var/run/supervisor.sock 

Edit: в то время как это было бы правильным ответом, если /var/run/supervisor.sock был файл, он не будет работать, потому что это гнездо, и параметр Ansible create не будет работать.

Наиболее анзибль иш решение, которое я могу вспомнить, используя внешний модуль анзибль, как один из них, чтобы проверить, если вы обрабатываете уже существует (test_process) или уже прослушивает (test_tcp)

+0

Спасибо за ваше предложение. Я попробовал, но, к сожалению, похоже, что '/ var/run/supervisor.sock' уже создан. Я проверил, существует ли он (он существует), но, похоже, все еще пытается запустить супервизор, потому что я получаю ту же ошибку, что и «Ошибка: другая программа уже прослушивает порт, который один из наших HTTP-серверов настроен на использование» '. Любая идея, что может быть неправильно здесь? – kramer65

+0

Хорошо, я проверил, существует ли файл с регулярным 'if [! -f /var/run/supervisor.sock]; то echo 'file не существует!'; fi', и это также говорит, что файл не существует. Это потому, что флаг '-f' только сообщает о регулярных файлах, где мне нужен флаг' -S' для файлов сокетов. Может ли быть, что тест, который Ansible делает, касается только обычных файлов?Есть ли способ, которым я могу выбрать тип файла для 'create', или есть ли другие варианты? – kramer65

Смежные вопросы