我希望你们能帮助我。
基本上,我需要一段Ansible代码,在该代码中,我向Solaris中的进程发送HUP信号,然后需要监视在处理HUP信号时填充的日志文件(链接到该进程)。这个想法是当在该日志文件上找到字符串“重载配置数据”时,任务完成(否则超时并失败)。请注意,在以前的事件中,日志中存在字符串,但是我需要监视发送到那里的最新条目。
这是我到目前为止尝试过的部分,没有运气(即使该字符串在日志文件中显示了几分钟后仍显示)。请注意,下面的“尾巴”仅显示当时的最新行。我尝试使用“ -f”,但该任务挂在那里,并没有成功。
- name: HUP certain_process
command: "pkill -HUP certain_process"
- name: Get the content of the last line in logfile
shell: tail -1 logfile
register: tail_output
- name: Waits until process HUP finishes
wait_for:
path: '{{tail_output.stdout_lines}}'
search_regex: "Configuration data reloaded"
delay: 20
timeout: 280
register: wait
ignore_errors: True
- name: Fail if HUP failed
fail: msg="App HUP failed"
when: wait|failed
和输出:
TASK [HUP certain_process] **************************************************************
Tuesday 20 November 2018 01:14:18 +0000 (0:00:05.575) 0:00:20.148 ******
changed: [host1]
TASK [Get the contents of the last line in logfile] ***************
Tuesday 20 November 2018 01:14:23 +0000 (0:00:05.413) 0:00:25.561 ******
changed: [host1]
TASK [Waits until process HUP finishes] ****************************************
Tuesday 20 November 2018 01:14:27 +0000 (0:00:04.067) 0:00:29.629 ******
fatal: [host1]: FAILED! => {"changed": false, "elapsed": 280, "failed": true, "msg": "Timeout when waiting for search string Configuration data reloaded in ['Nov 20 01:44:28 host1 SYS(15) HUP signal detected: reloading configuration data...']"}
...ignoring
TASK [Fail if hupped failed] ***************************************************
Tuesday 20 November 2018 01:19:13 +0000 (0:04:45.737) 0:05:15.366 ******
fatal: [host1]: FAILED! => {"changed": false, "failed": true, "msg": "App HUP failed"}
to retry, use: --limit @/export/home/carlos/project/policyUpdate.retry
答案 0 :(得分:1)
如果没有别的,这是不正确的:
- name: Waits until process HUP finishes
wait_for:
path: '{{tail_output.stdout_lines}}'
search_regex: "Configuration data reloaded"
the fine manual告诉您,path:
字段期望文件系统上的路径,而不是list
的{{1}}({{ 1}})。
我实际上认为您希望until:
与 str
一起使用(因为您不需要静态字符串的正则表达式功能)。尽管我说可能是因为实际上将stdout_lines
与until: "Configuration data reloaded" in tail_output.stdout
一起使用意味着您确实冒着“魔术字符串”出现在文件中但被漏掉的风险,因为它已经出现了在tail -1
窗口中,但被下一行推到一边。
我认为您可能更愿意使用delay:
或类似的东西,以便结合日志文件内容的冗长性给delay:
重叠时间。