Jboss 可回复状态

Jboss 可回复状态,jboss,ansible,Jboss,Ansible,我有一个ansible playbook,它在部署jboss eap实例的同时还部署了一些其他东西。在使用提供的standalone.sh脚本启动jboss之前,playbook运行良好。我使用shell模块来启动这个脚本,它工作得很好,jboss启动了,但是当任务执行时ansible不会返回任何状态消息,比如changed或OK,只是看起来挂起了 有没有办法强迫ansible将其视为改变了系统状态的东西?我个人并不使用jboss,但这听起来像startup.sh脚本并不是在后台启动jboss,

我有一个ansible playbook,它在部署jboss eap实例的同时还部署了一些其他东西。在使用提供的standalone.sh脚本启动jboss之前,playbook运行良好。我使用shell模块来启动这个脚本,它工作得很好,jboss启动了,但是当任务执行时ansible不会返回任何状态消息,比如changed或OK,只是看起来挂起了


有没有办法强迫ansible将其视为改变了系统状态的东西?

我个人并不使用jboss,但这听起来像startup.sh脚本并不是在后台启动jboss,所以ansible只是在等待它结束,而它永远不会结束

有几种可能的方法可以解决这个问题。根据中的信息,您可能希望尝试以下任务:

- 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脚本,那么另一种选择是在您已经安装并可用的情况下使用它。我在从Ansible调用长时间运行的命令时经常这样做,以便在运行playbook后检查命令的状态:

- name: Invoke long running command
  command: /usr/bin/screen -d -m /path/to/my/command
  async: True
  poll: 0

这将启动一个分离的屏幕会话,并在其中调用您的命令。Ansible会很快忘记它,让命令自己运行。

你可以在详细模式下运行playbook
-vvv
是的,我知道这并不能让我继续下去。问题是,正在执行的脚本不会对系统状态进行任何更改,因此ansible不会响应,只是挂起,但脚本运行良好。当它通过ansible任务执行时,它只是挂起(JBoss启动正常,但ansible任务挂起)。当运行脚本时,它会将一堆信息转储到控制台,所以我认为发生的是Ansible没有返回任何类型的状态,因此保持任务打开。。。通常,在运行脚本或命令时,它会返回OK、Changed等,具体取决于它是否更改了系统的状态。在这种情况下,因为脚本只是将一堆输出转储到屏幕上,所以可以说没有状态更改。您可以说脚本将一堆输出转储到屏幕上。它是否曾经返回到命令提示符,而不必执行任何类似击键之类的操作?没有,它本质上只是一个启动JBoss的脚本,它会通过一堆xml文件检查一切是否就绪。在启动JVM之前大约需要20秒左右。。。我尝试将async设置为20秒,这很好,但它似乎会杀死Java(JBoss)进程……如果它没有返回到命令提示符,那么它将在前台运行,因此正如我在回答中所述。您需要以将jboss放在后台的方式启动jboss,否则控件将永远不会返回Ansible。这与您自己手动调用ssh remote host/path/to/standalone.sh类似。如果standalone.sh正在前台运行,ssh调用将不会返回。Ansible本质上是在做完全相同的事情。您需要重写standalone.sh以在后台启动jboss、使用nohup或使用init脚本。