問題描述:
打開終端,使用nohup后台啟動服務之后,只要關掉終端,服務就down了
期望結果:
關掉終端后,服務依然后台保持運行
技術分析:
Unix/Linux下一般想讓某個程序在后台運行,很多都是使用&在程序結尾來讓程序自動運行;但如果要想在退出終端后,程序依然還在后台運行,則要用nohup與&組合來實現。
nohup 命令
用途:不掛斷地運行命令
語法:nohup Command [選項 參數] &
描述:nohup 命令運行由 Command參數和任何相關的Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷后使用 nohup 命令運行后台中的程序:要運行后台中的 nohup 命令,需要添加&到命令的尾部。
日志記錄:
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的nohup.out 文件中。如果當前目錄的nohup.out文件不可寫,輸出重定向到$HOME/nohup.out文件中。如果沒有文件能創建或打開以用於追加,那么 Command 參數指定的命令不可調用。
使用時注意:
在當shell中提示了nohup成功后,還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然后通過在shell中輸入exit來退出終端;如果在nohup執行成功后直接點關閉程序按鈕關閉終端的話,這時候會斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown,起不到關掉終端后調用程序繼續后台運行的作用
nohup的其它一些使用命令
ctrl + z 可以將一個正在前台執行的命令放到后台,並且處於暫停狀態。 Ctrl+c 終止前台命令。 jobs 查看當前有多少在后台運行的命令。
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
簡單的說就是:
- nohup Command >run.log &
- 回車
- 輸入exit命令退出終端
- 關閉shell