У меня есть сервер, на котором 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, которое по-прежнему будет действительно приветствоваться.
Спасибо за ваше предложение. Я попробовал, но, к сожалению, похоже, что '/ var/run/supervisor.sock' уже создан. Я проверил, существует ли он (он существует), но, похоже, все еще пытается запустить супервизор, потому что я получаю ту же ошибку, что и «Ошибка: другая программа уже прослушивает порт, который один из наших HTTP-серверов настроен на использование» '. Любая идея, что может быть неправильно здесь? – kramer65
Хорошо, я проверил, существует ли файл с регулярным 'if [! -f /var/run/supervisor.sock]; то echo 'file не существует!'; fi', и это также говорит, что файл не существует. Это потому, что флаг '-f' только сообщает о регулярных файлах, где мне нужен флаг' -S' для файлов сокетов. Может ли быть, что тест, который Ansible делает, касается только обычных файлов?Есть ли способ, которым я могу выбрать тип файла для 'create', или есть ли другие варианты? – kramer65