一、nohup命令簡介
在Linux中,nohup命令可以在用戶退出登錄後仍然運行指定的命令或腳本,不會受到HUP(掛起)信號的影響,即使關閉終端窗口或退出當前會話,被nohup的命令仍然會在後台運行。nohup命令常用於長時間運行的任務,如定時備份、數據掃描等。
nohup具有如下語法:
nohup COMMAND [ARGS] [&]
其中COMMAND是要執行的命令或腳本,[ARGS]是命令或腳本的參數,&符號表示在後台啟動命令。
二、nohup輸出重定向
1. 將nohup輸出追加到文件
在使用nohup啟動腳本後,我們可以通過重定向符號”>>”指定輸出到文件中,對於長時間運行的程序,比如備份腳本,在nohup命令後加上”>>”選項可以將命令的輸出追加到指定的文件中,以便我們在後續查看輸出日誌,示例代碼如下:
nohup command >> log.txt &
其中,command是要執行的命令或腳本,log.txt是輸出日誌文件名,&符號表示在後台啟動命令。
2. 將nohup輸出覆蓋到文件
如果我們希望每次運行腳本時將輸出覆蓋到同一個文件中,可以用重定向符號”>”代替”>>”,示例代碼如下:
nohup command > log.txt &
其中,command是要執行的命令或腳本,log.txt是輸出日誌文件名,&符號表示在後台啟動命令。
3. 將nohup輸出同時輸出到終端和文件
還有一種場景是既需要將nohup輸出到文件中,又需要將輸出實時的展示在終端上,此時可以通過tee命令實現,示例代碼如下:
nohup command | tee log.txt &
其中command是要執行的命令或腳本,log.txt是輸出日誌文件名,tee命令會將數據重定向到指定文件同時輸出到屏幕上。
三、小技巧:nohup輸出後台運行進程PID的獲取
1. 使用$!獲取PID
在使用nohup啟動後台進程時,通常需要獲取進程的PID,以便於後續的停止等操作,這個時候可以通過$!獲取進程的PID,示例代碼如下:
nohup command & echo $! > pid
上面的命令的含義是:啟動command命令,並將進程的PID輸出到pid文件中。注意,$!只能獲取到最近一個後台進程的PID,如果要獲取上一個後台進程的PID,可以使用歷史命令中的!-n,其中n是歷史記錄數目,例如!-2表示執行倒數第二條命令。
2. 使用pidof獲取PID
另外,我們還可以使用pidof命令獲取nohup啟動的後台進程的PID,示例代碼如下:
nohup command & pidof command > pid
上面的命令的含義是:啟動command命令,通過pidof命令獲取命令的PID,並將PID輸出到pid文件中。
以上是將nohup輸出重定向到指定文件的方法和小技巧,可以實現將運行的腳本或命令在後台運行,並將輸出到指定文件中,可以有效的避免在終端崩潰或關閉時運行的腳本停止運行,同時方便後續查看運行日誌。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/189297.html