I am using ansible for the execution of a script (myScript.sh) over some nodes through the command:
- 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
The execution of the script may need around 2-3 seconds or maybe less in order to give an output message on the shell (depending on the node). I am using the out.stdout_lines for debugging purposes, to be sure about the status of the execution.
Some nodes give as an output the following one which is correct;
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"
]
}
But some other nodes, seem to have passed the command, without executing it;
ok: [node2] => {
"out.stdout_lines": []
}
I have managed to solve this by using the following playbook (added sleep) – all the nodes now give the desired output message (child process started successfully);
- 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
I know that this is a rough solution for my case, but is there a way to wait for a responding message from the node?
Best Answer
This will execute myscript.sh, then wait for it to end, then wait 5 seconds, you could try something like:
The second command will wait for the myScript.sh to finish succesfully (return 0), then it will show the script log, if there is no log then your first command didn't work correctly.