我有一个ansible playbook,它将jboss eap实例与其他一些东西一起部署。该剧本运行良好,直到它使用提供的standalone.sh脚本启动jboss。我正在使用shell模块来启动这个脚本,它工作正常jboss启动但是当执行任务时ansible不会返回任何状态消息,如更改或OK,似乎挂起。
有没有办法可以强迫ansible将其视为改变了系统状态的东西?
答案 0 :(得分:3)
我个人不使用jboss,但这听起来像启动.sh脚本只是在后台启动jboss,所以ansible只是等待它结束而它永远不会。
有一些潜在的方法可以解决这个问题。根据{{3}}中的信息,您可能想要尝试这样的任务:
- name: start jboss
shell: nohup standalone.sh > /dev/null
async: True
poll: 0
poll: 0
告诉Ansible要解雇并忘记'命令。如果你不包含这个,那么当Ansible从远程服务器返回时,它将终止进程。
另一种可能性是使用init脚本。我上面链接的线程指向一个您应该能够找到init脚本的位置。您可以安装它(如果您不想在系统重新启动时启动jboss,则将其禁用),然后通过Ansible的service命令运行它:
- name: start jboss
service: name=jboss state=started
编辑:如果您不愿意或无法使用nohup或将jboss放入后台的init脚本,那么另一种方法是使用this thread(如果已安装并可用)。我经常在从Ansible调用长时间运行的命令时执行此操作,这样我可以在运行playbook之后检查一下以检查命令的状态:
- name: Invoke long running command
command: /usr/bin/screen -d -m /path/to/my/command
async: True
poll: 0
这将启动一个分离的屏幕会话并在其中调用您的命令。 Ansible会立即忘掉它,让命令自行运行。