我正在尝试使用Ansible运行一个简单的tail命令。迭代3个字符串,直到找不到所有字符串。如果发现在tail命令上循环,直到找不到所有。
- name: Tail the logs for string
shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'"
register: tail
until: "'STRING1' and 'STRING2' and 'STRING3' not in tail.stdout_lines"
retries: 10
delay: 5
当我运行上述任务并且没有任何东西可以返回时,它会以致命错误退出。即使这是成功案例。
fatal: [testserver]: FAILED! => {"changed": true, "cmd": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "delta": "0:00:00.012770", "end": "2016-09-07 07:44:35.684238", "failed": true, "invocation": {"module_args": {"_raw_params": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 1, "start": "2016-09-07 07:44:35.671468", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
我不确定为什么它会以致命的状态结束。
答案 0 :(得分:2)
grep
在没有匹配任何内容时返回非零值。如果要覆盖其退出状态:
shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3' ||:"
答案 1 :(得分:0)
在解决了tail命令之后,感谢来自@ charles-duffy的建议,问题仍然存在于循环条件中。
这是正确的条件:
until: '"STRING1" not in tail.stdout and "STRING2" not in tail.stdout and "STRING3" not in tail.stdout'
我还使用tail.stdout
代替tail.stdout_lines
由于