linux exec 命令的輸出重定向到日志文件,方法取決于你希望如何處理標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤。 簡單來說,你需要使用輸出重定向符號 > 和 2>。
直接將命令的標(biāo)準(zhǔn)輸出重定向到日志文件,可以使用 > 符號:
exec > mylog.txt mycommand
登錄后復(fù)制
這會將 mycommand 的所有標(biāo)準(zhǔn)輸出寫入 mylog.txt 文件。 需要注意的是,exec > mylog.txt 會替換掉當(dāng)前 shell 的標(biāo)準(zhǔn)輸出,后續(xù)所有命令的標(biāo)準(zhǔn)輸出都會寫入 mylog.txt,直到你關(guān)閉 shell 或重新設(shè)置標(biāo)準(zhǔn)輸出。 我曾經(jīng)因為忘記這一點,調(diào)試一個腳本時,所有后續(xù)的 echo 命令輸出都丟失了,最后不得不重新運行。 所以,建議在腳本中謹(jǐn)慎使用這種方法,或者在執(zhí)行完需要記錄輸出的命令后,恢復(fù)標(biāo)準(zhǔn)輸出:
exec > mylog.txt mycommand exec > /dev/null #恢復(fù)標(biāo)準(zhǔn)輸出到空設(shè)備
登錄后復(fù)制
如果需要同時記錄標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤,則需要分別重定向:
exec > mylog.txt 2>&1 mycommand
登錄后復(fù)制
2>&1 將標(biāo)準(zhǔn)錯誤 (文件描述符 2) 重定向到標(biāo)準(zhǔn)輸出 (文件描述符 1) 的位置,即 mylog.txt。 這是一種常用的方法,確保所有輸出,包括錯誤信息,都被記錄下來。 我曾經(jīng)在一個監(jiān)控腳本中,只重定向標(biāo)準(zhǔn)輸出,結(jié)果漏掉了重要的錯誤信息,導(dǎo)致問題排查花費了額外的時間。 因此,強烈建議將標(biāo)準(zhǔn)錯誤也一并重定向。
如果希望追加到已存在的日志文件,而不是覆蓋,則使用 >> 符號:
exec >> mylog.txt 2>&1 mycommand
登錄后復(fù)制
這會將 mycommand 的輸出添加到 mylog.txt 文件的末尾。 這在持續(xù)監(jiān)控或日志記錄場景下非常有用。 比如,我曾經(jīng)用這個方法構(gòu)建一個持續(xù)記錄系統(tǒng)運行狀態(tài)的腳本,每天自動追加日志,方便長期追蹤。
此外,還需要注意文件權(quán)限。 如果 mylog.txt 文件不存在,則需要確保當(dāng)前用戶有權(quán)限在該目錄下創(chuàng)建文件。 如果文件已存在,則需要確保當(dāng)前用戶有寫入權(quán)限。 權(quán)限問題經(jīng)常導(dǎo)致日志記錄失敗,卻不容易被發(fā)現(xiàn),調(diào)試時需要仔細(xì)檢查。
總而言之,靈活運用 >、>> 和 2>&1 這些重定向符號,可以有效地將 exec 命令的輸出,以及其他命令的輸出,準(zhǔn)確地記錄到日志文件中,從而方便后續(xù)的分析和調(diào)試。 記住謹(jǐn)慎使用 exec 重定向標(biāo)準(zhǔn)輸出,并仔細(xì)檢查文件權(quán)限,可以避免很多不必要的麻煩。
路由網(wǎng)(www.lu-you.com)您可以查閱其它相關(guān)文章!