首页 > 解决方案 > Ansible grep 多个文件,然后将输出发送到邮件(使用了错误的库存)-已解决

问题描述

我试图在多个目录中获取某些文本,然后发送输出,当我在机器上使用相同的 shell 时,它可以正常工作并发送请求的输出,但是在这种情况下尝试使用 ansible 时我'我得到错误。

- name: Extract logs from server
  hosts: all
  tasks:
  - name: execute
    shell: grep -ir {{ my_var }}  /var/log/folder/folder/* | mailx -s "Findings" {{ email }}

my_var: 1234-abcd-1a2b3c3d

电子邮件:bla.bla@company.com 错误:

fatal: [10.54.229.13]: FAILED! => {"changed": true, "cmd": "grep -ir 37f624c3-c898-4e2b-958a-ab78d20a03fe /var/log/3ds/components/* > /tmp/log", "delta": "0:00:00.005845", "end": "2020-10-05 17:28:17.509948", "msg": "non-zero return code", "rc": 2, "start": "2020-10-05 17:28:17.504103", "stderr": "grep: /var/log/3ds/components/*: No such file or directory", "stderr_lines": ["grep: /var/log/3ds/components/*: No such file or directory"], "stdout": "", "stdout_lines": []}

我还尝试 grep > /tmp/tmp.file 然后从那里 cat tmp.file | 邮件内容。并且在机器本身上使用时效果很好,但没有抛出 ansible。

尝试时:

"find /var/log/folder/components/* -type f -exec grep 37f624c3-c898-
 {} \; > /tmp/log "

得到以下信息:

ERROR! Syntax Error while loading YAML.
  found unknown escape character
The error appears to have been in '/tmp/awx_730_htsr76go/project/v2_log_extraction.yml': line 9, column 103, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
  - name: execute
    shell: "find /var/log/folder/components/* -type f -exec grep 37f624c3-c898 {} \; > /tmp/log "
                                                                                                      ^ here

在剧本中使用 var 时

- name: Extract logs from server
  hosts: all
  become: yes
  tasks:
  - name: execute
    shell: "find /var/log/folder/components/* -type f -exec grep "{{ my_var}}" {} \; | mailx -s "log" {{ email }}"
    args:
      executable: /bin/sh

出现以下错误:

    The error appears to have been in '/tmp/awx_733_qiog0f53/project/v2_log_extraction.yml': line 9, column 64, but may
    be elsewhere in the file depending on the exact syntax problem.
    The offending line appears to be:
  - name: execute
    shell: "find /var/log/3ds/components/* -type f -exec grep {{ my_var}} {} \; | mailx -s "log" {{ email }}"
                                                                             ^ here
We could be wrong, but this one looks like it might be an issue with
    missing quotes.  Always quote template expression brackets when they
    start a value

请建议获得结果的最佳方法

大家好,第一个代码完美运行。问题出在椅子和电脑之间:D 我用错误的服务器使用了错误的库存,确实没有 /var/log/folder/folder

感谢每一个人的帮助

标签: linuxshellansiblegrepmailx

解决方案


推荐阅读