Ansible shell 传递命令但不执行它

Ansible shell 传递命令但不执行它

我正在使用 ansible 通过以下命令在某些节点上执行脚本(myScript.sh):

- hosts: primaryNodes,!node13
  vars:
    mongodPath: /usr/local/mongodb
  become: yes
  become_user: user
  tasks:
  - name: starting mongod on all shards
    shell: "sh {{ mongodPath }}/myScript.sh"
    register: out
  - debug: var=out.stdout_lines

脚本的执行可能需要大约 2-3 秒或更短的时间才能在 shell 上给出输出消息(取决于节点)。我使用 out.stdout_lines 进行调试,以确保执行状态。

一些节点给出以下正确的输出;

ok: [node16] => {
    "out.stdout_lines": [
        "about to fork child process, waiting until server is ready for connections.", 
        "forked process: 2837", 
        "child process started successfully, parent exiting"
    ]
}

但其他一些节点,好像已经传递了命令,但是并没有执行它;

ok: [node2] => {
    "out.stdout_lines": []
}

我已经设法通过使用以下剧本(添加睡眠)解决了这个问题 - 所有节点现在都给出所需的输出消息(子进程成功启动);

- hosts: primaryNodes,!node13
  vars:
    mongodPath: /usr/local/mongodb
  become: yes
  become_user: user
  tasks:
  - name: starting mongod on all shards
    shell: "sh {{ mongodPath }}/myScript.sh && sleep 5s"
    register: out
  - debug: var=out.stdout_lines

我知道这对于我的情况来说是一个粗略的解决方案,但是有没有办法等待来自节点的响应消息?

答案1

  shell: "sh {{ mongodPath }}/myScript.sh && sleep 5s"

这将执行我的脚本,然后等待它结束,然后等待 5 秒钟,您可以尝试以下操作:

  shell: "{{ mongodPath }}/myScript.sh && tail -n 10 {{ mongodPath }}/myScript.log"

第二个命令将等待我的脚本成功完成(返回 0),然后它将显示脚本日志,如果没有日志那么您的第一个命令就没有正常工作。

相关内容