Linux命令之nohup 和 & 的使用說明

原文鏈接:https://blog.csdn.net/xiaojin21cen/article/details/88991768

nohup 命令說明

nohup 是 no hungup 的縮寫,意思是“不掛斷”。

我們在使用Xshell等工具,遠程執行Linux腳本時,有時候會由於網絡問題,導致失去連接,終端斷開,程序運行一半就意外結束了。這種時候,就可以用``nohup` 指令來運行指令,使程序可以忽略掛起信號繼續運行。

語法格式:

    nohup Command [ Arg ... ] [ & ]

    nohup 命令運行由 Command 參數 和 Arg參數 指定的命令,忽略所有掛斷(SIGHUP)信號。

    如果想要在運行後臺中的 nohup 命令,則要添加 & ( 表示 “and” 的符號)到命令的尾部。

    如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

1、只使用 nohup

語法格式:

nohup  Command

關閉 標準輸入(控制檯無法輸入),標準輸出 和 錯誤信息保存到 nohup.out 文件裏面,關閉客戶端後命令仍然會運行。

例如:

將nohup sh test.sh 任務放到後臺,關閉標準輸入,終端不再能夠接收任何輸入(標準輸入),重定向標準輸出和標準錯誤到當前目錄下的nohup.out 文件,即使關閉xshell退出當前session依然繼續運行。
2、只使用 &

語法格式:

sh Command  &

不會關閉標準輸入(控制檯可以輸入),但會丟失 標準輸出 和 錯誤信息,關閉客戶端後命令會就馬上停止。

例如:

將sh test.sh & 任務放到後臺 ,關閉 xshell,對應的任務也跟着停止。
3、 nohup 和 & 配合使用(推薦使用)

語法格式:

nohup Command [ Arg ... ] &

示例:

nohup sh test.sh &

不會關閉標準輸入(控制檯可以輸入),也不會丟失標準輸出和錯誤信息,並將輸出信息保存到 nohup.out 中,關閉客戶端後命令仍然會運行。

例子1:
nohup sh test.sh & 命令在後臺執行,可以使用標準輸入,終端能夠接收任何輸入,標準輸出 和 錯誤信息 默認保存到當前目錄下的 nohup.out 文件,即使關閉xshell退出當前session依然繼續運行。

例子2:
nohup ./startWeblogic.sh & 意思是即使退出ssh界面,命令仍然在後臺執行,並且打印日誌到 nohup.out 文件中,當然也可以將nohup.out 的輸出轉向到其他文件,需要使用 重定向 。
4、 nohup、 & 、 重定向(推薦使用)

使用 nohup sh test.sh & 命令時,默認是將信息輸出到 nohup.out 文件中。 但是在實際工作中,我們想把日誌信息輸出到某個具體文件中,可以下面的命令。

語法格式:

nohup  command  >logfile  2>&1  &

上面命令可以拆分成三部分 nohup command & 、 >logfile 和 2>&1 。

    nohup command & :這個命令上面已經介紹過了,就是後臺運行命令;
    >logfile :將 command 運行的日誌 重定向 寫入到 logfile 文件中,即輸出內容 不打印到屏幕上,而是輸出到 logfile 文件中。
    2>&1 是將 錯誤信息(2) 重定向到標準輸出(&1)。而 標準輸出 默認是寫入到 file 文件中,所以 錯誤信息(2)、 標準輸出 都 寫入到 file 文件中。

例子:

nohup  starMailWeb.sh > mail.log 2>&1  &

後臺運行 starMailWeb.sh ,並且將 標準輸出(1)、標準錯誤(2) 等日誌 寫入到 mail.log 文件中。

2>&1 相關的參數說明:

    /dev/null 表示空設備文件,

    0 表示 stdin (standard input) 標準輸入,

    1 表示 stdout (standard output) 標準輸出,

    2 表示 stderr (standard error) 標準錯誤信息;

    > file 表示將 標準輸出(1) 輸出到 file文件,也就相當於 1>file ;

    2>error 表示將 錯誤信息(2) 重定向到 error文件中 ;

    2>&1 也就表示將 錯誤信息(2) 重定向 到 標準輸出(1) ;

    2>&1 >logfile :錯誤信息(2) 重定向 到 標準輸出(1) ,標準輸出(1) 重定向 到 文件file ,等於 1>logfile 2>&1 ,即 標準輸出(1) 重定向 到 logfile 文件中,錯誤信息(2) 重定向 到 標準輸出(1) 。

    & 放在命令到結尾,表示後臺運行,防止終端一直被某個進程佔用,這樣終端可以執行別到任務,配合 >file 2>&1 可以將 log信息保存到某個文件中,但如果終端關閉,則進程也停止運行。如 command > file.log 2>&1 & 。 ( 參考 2、只使用 &)

5、知識擴展
5.1、清空 nohup.out

如果命令一直運行下去,nohup.out會一直自己增長下去,如果你的服務器硬盤不給力的話,很容易把應用也掛掉(硬盤沒空間 ,啥都玩不轉),但是又不能一味的直接刪。因爲直接刪除,可能會造成應用無法打印後續的錯誤日誌,該問題常見於weblogic服務器,jboss服務器等這些大型中間件,這個在生產環境上要尤爲注意。

因此就有了我們不停止服務直接,清空nohup.out文件的方法。
下面是兩個種不用停止WEB服務就可以清空nohup.out的命令。

第一種:cp /dev/null nohup.out
第二種:cat /dev/null > nohup.out

 

5.2、解決 nohup.out 文件過大

nohup 的重定向,一勞永逸解決 nohup.out 文件過大的問題
以下是定義日誌打印級別,除了高於級別2的告警信息記錄到log文件外,其餘直接不記錄

//只輸出錯誤信息到日誌文件
nohup ./program >/dev/null 2>log &

//什麼信息也不要
nohup ./program >/dev/null 2>&1 &
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章