Chef

無法將廚師錯誤擷取到文件中

  • December 15, 2015

如果我執行以下命令:

chef-client --force-formatter --logfile STDOUT 2>&1

然後 control-c 它在執行中(或遇到任何類型的錯誤)我看到這個很好的錯誤消息:

[2014-09-12T00:00:30-04:00] FATAL: SIGINT received, stopping

================================================================================
Recipe Compile Error in /var/cache/chef/cookbooks/users/recipes/fen.rb
================================================================================


SystemExit
----------
exit


Cookbook Trace:
---------------
 /var/cache/chef/cookbooks/users/recipes/default.rb:11:in ``'
 /var/cache/chef/cookbooks/users/recipes/default.rb:11:in `from_file'
 /var/cache/chef/cookbooks/users/recipes/fen.rb:15:in `from_file'


Relevant File Content:
----------------------
/var/cache/chef/cookbooks/users/recipes/default.rb:

etc...

[2014-09-12T00:00:30-04:00] ERROR: Running exception handlers
[2014-09-12T00:00:30-04:00] ERROR: Exception handlers complete
[2014-09-12T00:00:30-04:00] FATAL: Stacktrace dumped to /var/cache/chef/chef-stacktrace.out
Chef Client failed. 0 resources updated

但是,如果我執行以下操作:

chef-client --force-formatter --logfile STDOUT 2>&1 | tee /tmp/chef.log

然後 control-c,我看到了我之前看到的所有日誌消息,除了那個很好的致命消息告訴我發生了什麼。我正在傳輸的文件也沒有顯示致命消息。

所以顯然廚師客戶端正在檢測它是否正在管道到實際的文件描述符,如果是,則抑制輸出。有誰知道阻止它這樣做的方法?

我想出了一個巧妙的技巧

script -c chef-client /tmp/chef.log

正是我想要的。

儘管將 STDOUT 指定為日誌文件,但似乎 Chef 將錯誤輸出到 STDERR 而不是 STDOUT。以下命令應該可以工作:

chef-client --force-formatter --logfile STDOUT 2>&1 | tee /tmp/chef.log

引用自:https://serverfault.com/questions/628005