我有一台Supervisord正在管理我的流程的服务器。我通常使用以下命令启动supervisord:
sudo /var/www/imd/venv/bin/supervisord -c /var/www/imd/deploy/supervisord.conf
我现在正试图用Ansible进行设置,但我不确定如何启动Ansible。我当然可以使用类似的东西来做:
- name: run supervisord
command: "/var/www/imd/venv/bin/supervisord -c /var/www/imd/deploy/supervisord.conf"
这样可行,但只是第一次运行它。第二次运行相同的脚本时,supervisord当然已经在运行,这会导致以下错误:
TASK [run supervisord] ************************************************** *****致命:[ansible-test1]:失败! => {“已更改”:true,“cmd”: [“/ var / www / imd / venv / bin / supervisord”,“ - c”, “/var/www/imd/deploy/supervisord.conf”],“delta”:“0:00:00.111700”, “结束”:“2016-06-03 11:57:38.605804”,“失败”:真实,“rc”:2,“开始”: “2016-06-03 11:57:38.494104”,“stderr”:“错误:另一个程序是 已经在端口上侦听我们的一个HTTP服务器已配置 使用。在开始之前首先关闭此程序 supervisord。\ n如需帮助,请使用/ var / www / imd / venv / bin / supervisord -h“, “stdout”:“”,“stdout_lines”:[],“警告”:[]}
有人知道我怎么能正确地使用Ansible进行监督吗?欢迎所有提示!
[编辑]
因为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
这当然不是很“可靠”。如果有人有一个真正受欢迎的基于Ansible的解决方案。
答案 0 :(得分:1)
您的情况是特定的,因为您似乎不会使用常规Supervisor作为普通系统包安装;在这种情况下,您可以使用Ansible的service
模块,像任何其他常规系统服务一样启动/停止/重新启动它。
默认情况下,启动时Supervisor会创建一个套接字来监听来自supervisorctl
的管理命令。当它停止它它应该删除它。
尝试在特定设置中找到此套接字的创建位置(默认为/var/run/supervisor.sock
)。
然后,让Ansible command
模块知道如果Suopervisord进程已在运行,则套接字存在,使用creates
选项(documentation)。这样,如果command
已经在运行,它就不会尝试运行{\ n} {/ p>
- name: run supervisord
command: "./venv/bin/supervisord -c ./deploy/supervisord.conf"
args:
chdir=/var/www/imd
creates=/var/run/supervisor.sock
修改:如果/var/run/supervisor.sock
是一个文件,这将是正确答案,但它不会工作,因为它是套接字,而且是Ansible' s create
参数无法正常工作。
我能想到的最可靠的解决方案是使用外部Ansible模块,例如其中一个,检查您的处理是否已经存在(test_process
)或已经在监听(test_tcp
)< / p>
答案 1 :(得分:0)
您可以使用主管模块
- supervisorctl:
name: my_app
state: restarted
config: /var/opt/my_project/supervisord.conf
或
- name: Restart my_app
supervisorctl:
name: my_app
state: restarted
config: /var/opt/my_project/supervisord.conf
关于https://docs.ansible.com/ansible/2.7/modules/supervisorctl_module.html#examples的完整文档