nohup sh start.sh >/dev/null 2>&1 &
背景說明
start.sh 腳本里,寫了Java應用程序啟動的相關命令,並且在 log4j.properties 中配置了日志的輸出路徑。
此時,啟動服務的時候,如果使用如下命令,則會在start.sh腳本所在的目錄下,產生一個名為 nohup.out 的輸出文件。
nohup sh start.sh &
這個多余的 nohup.out 文件是不需要的,可以使用如下命令解決:
nohup sh start.sh >/dev/null 2>&1 &
命令解析
1、nohup &
nohup 表示永久運行,& 表示后台運行。
2、>/dev/null 2>&1
/dev/null 代表空設備文件,也就是不輸出任何信息到終端。
操作系統中有三個常用的流:
0:標准輸入流 stdin
1:標准輸出流 stdout
2:標准錯誤流 stderr
">/dev/null" 等價於 "1>/dev/null",表示標准輸出(1)輸出到 /dev/null 中,即終端不輸出標准輸出信息;
"2>&1" 中的 “&” 是等價於的意思,表示 標准錯誤(2)輸出的位置 等價於 標准輸出(1)的位置,即等價於 “2>/dev/null”, 即終端不輸出標准錯誤信息。
因此,">/dev/null 2>&1" 表示 標准錯誤信息和標准輸出信息,在終端上均不輸出。
3、指定輸出文件
如果想要將服務啟動和運行過程中的日志信息輸出到指定位置(比如:/var/log/start.log),可以參考如下命令:
nohup sh start.sh >/var/log/start.log 2>&1 &