一千萬個為什麽

搜索

如何將任務輸出記錄到文件?



我的一個任務是使用 impdp 導入Oracle數據庫。

這會向控制臺生成很多輸出,所以我設置了 no_log:True

但是,當這個失敗,我想看到日誌!

我怎樣才能使這個特定的任務日誌文件,而不是控制臺?

轉載註明原文: 如何將任務輸出記錄到文件?

一共有 6 個回答:

[將我的評論轉換為答案]

一種方法是將日誌寫入某個外部文件,然後在使用failed_when條件後執行任務,並在前一個任務成功時刪除日誌文件。

像這樣的東西應該可以幫到你。

 - name: Run Py script
      command: <>.py  > <>.log
      become: yes
      register: PyScript
      ignore_errors: True

    - name: PyScript on success
      command: rm <>.log
      when: PyScript|succeeded

註意:這可能不是解決您的問題的最佳方式。但是,這是一個黑客,幫助我進行日誌記錄和監控。

Tee將是一個非常簡單的日誌工具,你可以參考下面的命令。

[email protected]:~$ ansible -m ping all | tee > /tmp/ansible.log
[email protected]:~$ cat /tmp/ansible.log 
localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

我認為你需要做的就是註冊你需要的每個命令的輸出(將它存儲在一個變量中),然後簡單地將變量轉儲到一個文件中。這樣你可以稍後再查看它。

tasks:
  - name: Dump all vars
    action: template src=templates/dumpall.j2 dest=/tmp/ansible.all

然後在dumpall.j2中:

Module Variables ("vars"):
--------------------------------
{{ vars | to_nice_json }} 

Environment Variables ("environment"):
--------------------------------
{{ environment | to_nice_json }} 

GROUP NAMES Variables ("group_names"):
--------------------------------
{{ group_names | to_nice_json }}

GROUPS Variables ("groups"):
--------------------------------
{{ groups | to_nice_json }}

HOST Variables ("hostvars"):
--------------------------------
{{ hostvars | to_nice_json }} 

The example I'm using is from here

我認為你正在尋找的東西可能太簡單了,將stdout和street重定向到文件。

Typically , some-command &> logfile.log

或一些變體....

當我有一個命令執行並希望僅在發生故障時才獲取日誌的操作如下(以/bin/sh -c'...'為前綴)如果啟動器不使用 system 調用或不使用shell直接執行命令):

command 2&>1 > command-log.txt || cat command-log.txt

這樣會將錯誤和標準輸出重定向到一個文件,並在出現故障時顯示文件的內容。如果該命令非常冗長,並且您不希望在日誌確定時保留日誌,則可以使用:

command 2&>1 > command-log.txt && rm command-log.txt || cat command-log.txt

Quote for && and || usage from sh manpage:

The symbol && (||) causes the list following to be executed only if the preceding pipeline returns a zero (non zero) value.

這可能不是通過合理的方式實現它的最習慣的方式,但具有便攜性,可以使用任何配置管理系統提供顯示命令stdout的能力。

假設ansible將錯誤正確地引發至stderr,則可以使用輸出重定向將任何程序中的錯誤輸出捕獲到文件中:

some command 2> error.log

但我不認為這是事實。

相反,您可能需要參閱本指南以決定何時發生錯誤。 http:// docs。 ansible.com/ansible/playbooks_error_handling.html ,然後在輸出到文件之前為輸出的字符串指明錯誤

即。

ansible-playbook my-playbook | grep 'error' > error.log