Chef
無法將廚師錯誤擷取到文件中
如果我執行以下命令:
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