一、nohup命令簡介
在進行shell腳本編寫和運行過程中,可能會存在一些比較耗時的腳本需要在後台持續運行,此時我們可以選擇使用nohup命令。nohup命令可以讓程序在後台持續運行,即使執行命令的用戶退出登錄,程序也不會中斷,同時nohup命令也可以將程序的輸出信息重定向到指定文件,方便後期查看。nohup命令語法如下:
nohup Command [ Arg … ] [ & ]
其中,Command表示要運行的命令或腳本;Arg表示命令中的選項或參數;&表示讓命令在後台運行,即nohup命令的標準用法。
二、使用nohup命令運行shell腳本
使用nohup命令運行shell腳本有兩種方式,分別是在命令後添加&符號和使用nohup命令。
1.添加&符號的方式
在Linux的操作中,命令後添加&符號表示將命令放到後台,並立即返回控制台,但是如果關閉當前終端,命令也會停止運行。例如,我們有一個名為test.sh的shell腳本,想要在後台運行,可以使用以下命令:
./test.sh &
這樣就可以在後台持續運行test.sh腳本了。
2.使用nohup命令的方式
使用nohup命令可以讓程序在後台持續運行,即使執行命令的用戶退出登錄,程序也不會中斷。同時nohup命令也可以將程序的輸出信息重定向到指定文件,方便後期查看。
例如,我們有一個名為test.sh的shell腳本,想要在後台運行,並將輸出信息重定向到test.log文件中,可以使用以下命令:
nohup ./test.sh > test.log 2>&1 &
其中,>表示將輸出信息輸入到某個文件中,2>&1表示將標準錯誤輸出和標準輸出合併。
三、注意事項
雖然使用nohup命令可以讓程序在後台持續運行,但是在使用nohup命令的同時還需要注意以下幾個事項:
1.輸入輸出問題
因為nohup命令默認會將程序的輸出信息重定向到nohup.out文件中,如果在使用nohup命令之前已經將標準輸出或標準錯誤輸出重定向到其他文件中,就需要指定nohup命令的輸出文件。否則,nohup命令執行後,原來的輸出文件就被清空了,而輸出信息不會被記錄到任何地方,這樣會導致後續難以找到問題。
2.進程名問題
使用nohup命令啟動程序後,程序的進程名被設置為nohup。這樣在使用ps -ef命令查看進程時,會出現多個進程名為nohup的情況。解決方法是在啟動程序時使用重命名參數,例如:
nohup command arg1 arg2 arg3… argN 2>&1 & echo $! > /var/run/command.pid
其中,echo $!將啟動程序的進程id輸出到/var/run/command.pid文件中。這樣在查看進程時即可找到對應進程。
3.修改腳本問題
如果在使用nohup命令後修改了腳本內容,那麼在下一次啟動所生成的進程,將會運行修改後的腳本,而不是當時使用nohup命令時所運行的腳本。因此,在使用nohup命令後盡量避免修改腳本內容。
四、總結
nohup命令可以讓程序在後台持續運行,即使執行命令的用戶退出登錄,程序也不會中斷。同時nohup命令也可以將程序的輸出信息重定向到指定文件,方便後期查看。在使用nohup命令時,需要注意程序的輸出信息以及進程名問題,並盡量避免修改腳本內容。
原創文章,作者:PZUO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138709.html