1. 程式人生 > >使用Linux輸出重定向將debug資訊和ERROR資訊分離

使用Linux輸出重定向將debug資訊和ERROR資訊分離

最近在安裝Apache sentry,發現啟動metastore和hiveserver2服務的時候會彈出大量的debug資訊,有時候需要在一長串的資訊中尋找ERROR資訊,覺得挺花時間的,於是想到使用重定向將debug資訊輸出到指定的debug目錄下,ERROR資訊輸出到ERROR目錄下,這樣能提高效率。

1、下面先簡要介紹一下Linux重定向

0、1和2分別表示標準輸入、標準輸出和標準錯誤資訊輸出,可以用來指定需要重定向的標準輸入或輸出。
在一般使用時,預設的是標準輸出,即1.當我們需要特殊用途時,可以使用其他標號。例如,將某個程式的錯誤資訊輸出到log檔案中:

./program 2
> log

這樣標準輸出還是在螢幕上,但是錯誤資訊會輸出到log檔案中。另外,也可以實現0,1,2之間的重定向。例如:

2>&1

表示將錯誤資訊重定向到標準輸出。

Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以將輸出重定向到/dev/null。如果想要正常輸出和錯誤資訊都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null, 例如:

ls 1> /dev/null 2> /dev/null

還有一種做法是將錯誤重定向到標準輸出,然後再重定向到 /dev/null,例如:

ls >/dev/null 2>&1

注意:此處的順序不能更改,否則達不到想要的效果,此時先將標準輸出重定向到 /dev/null,然後將標準錯誤重定向到標準輸出,由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null,於是一切靜悄悄:-)

2、後臺執行指定程式,並將輸出重定向

為了讓指定程式在後臺執行,需要使用nohup命令,格式如下:

nohup <程式名> &

但是,需要注意的是,使用nohup時,會自動將輸出寫入nohup.out檔案中,且nohup.out檔案儲存在執行該命令的當前目錄。為了將提示資訊和錯誤資訊分別儲存在指定路徑下,需要使用重定向。

將提示資訊儲存在/usr/local/sentry/log/debug.out,將ERROR 資訊儲存在/usr/local/sentry/log/error.out下。

nohup <程式名或服務> 1>> /usr/local/sentry/log/debug.out 2>> /usr/local/sentry/log/error.out &