淺析Linux中使用nohup及screen運(yùn)行后臺(tái)任務(wù)的示例和區(qū)別
使用SSH終端(比如putty,xshell)連接Linux服務(wù)器上運(yùn)行比較耗時(shí)任務(wù),可能需要幾個(gè)小時(shí)甚至幾天才能完成,這時(shí)候終端被占據(jù),我們還要做其他的任務(wù)呢,所以需要將這一類(lèi)耗時(shí)任務(wù)放到后臺(tái)來(lái)跑,只需要記錄好日志就行了,有下面這些常用方法來(lái)實(shí)現(xiàn)這個(gè)需求。
command &
在終端輸入command &運(yùn)行,這時(shí)候使用Ctrl + C中止命令將會(huì)失效,因?yàn)閷?duì)&后臺(tái)運(yùn)行SIGINT1信號(hào)免疫,程序會(huì)繼續(xù)運(yùn)行。 但如果你直接關(guān)掉終端, 進(jìn)程將跟著中止。 可見(jiàn),使用&后臺(tái)運(yùn)行的進(jìn)程會(huì)被SIGHUP2信號(hào)中止,但是你如果用exit命令正常退出終端,程序?qū)⒗^續(xù)運(yùn)行在后臺(tái)不會(huì)中止。
nohup command
標(biāo)準(zhǔn)輸出會(huì)被默認(rèn)追加到當(dāng)前目錄下的nohup.out中,如果當(dāng)前目錄的nohup.out文件不可寫(xiě),輸出重定向到 $HOME/nohup.out
文件中。
那么,我們很容易想到將這兩個(gè)特性綜合一下這樣運(yùn)行命令:
nohup command > /home/user/myfile.log 2>&1 &
這樣將會(huì)在后臺(tái)一直執(zhí)行這個(gè)任務(wù)直到完成,并將程序標(biāo)準(zhǔn)輸出(1)標(biāo)準(zhǔn)錯(cuò)誤(2)都定向到/home/user/myfile.log文件中。
screen工具
screen可以理解為一個(gè)會(huì)話(huà)窗口管理工具,對(duì)于一般的使用,我們只需要會(huì)使用下面在這些操作即可:
# 使用yum安裝screen yum install screen # 創(chuàng)建一個(gè)名為test的會(huì)話(huà)窗口 screen -S test # 暫離窗口 Ctrl+a d(即按住Ctrl,依次再按a,d) # 查看存在的會(huì)話(huà)窗口 screen -ls # 進(jìn)入窗口 screen -r test screen -r 進(jìn)程ID # 關(guān)閉窗口 exit # 窗口切換 Ctrl+a c :在當(dāng)前screen會(huì)話(huà)中創(chuàng)建窗口 Ctrl+a w :窗口列表 Ctrl+a n :下一個(gè)窗口 Ctrl+a p :上一個(gè)窗口 Ctrl+a 0-9 :在第0個(gè)窗口和第9個(gè)窗口之間切換
有了在screen工具,我們就可以在終端上創(chuàng)建窗口,然后運(yùn)行需要的命令,然后暫離,然后就可以繼續(xù)做其他的事情了,當(dāng)然,也可以用其他的終端連接服務(wù)器后使用screen -r 命令連接需要的窗口,會(huì)發(fā)現(xiàn)程序一直在運(yùn)行,退出終端也不會(huì)影響到那些暫離的終端上運(yùn)行的程序。
測(cè)試:
我們寫(xiě)一個(gè)測(cè)試腳本test.sh:
#!/bin/sh for ((i=1; i<1000; i++)) do d=`date '+%Y-%m-%d %H:%M:%S'` echo "$d 第 $i 次輸出;" tt sleep 2s done Bash
只使用&后臺(tái)運(yùn)行:
[root@localhost test.cc]# ./test.sh > test.log 2>&1 & [1] 15037 [root@localhost test.cc]# ps -aux | grep test.sh root 15037 0.0 0.0 113180 1424 pts/0 S 16:10 0:00 /bin/sh ./test.sh root 15045 0.0 0.0 112712 992 pts/0 S+ 16:10 0:00 grep --color=auto test.sh Bash
可以看到15037進(jìn)程在運(yùn)行;
如果直接關(guān)閉終端,日志記錄就停止了,說(shuō)明進(jìn)程隨著終端會(huì)話(huà)的結(jié)束而停止執(zhí)行了;
但是,經(jīng)過(guò)反復(fù)測(cè)試發(fā)現(xiàn),如果使用exit命令正常退出終端,再連上終端后,使用&運(yùn)行的程序繼續(xù)在運(yùn)行,也就是&命令跟nohup效果是一樣的,我這里使用的測(cè)試環(huán)境是CentOS7.6。
使用nohup &運(yùn)行
[root@localhost test.cc]# nohup ./test.sh > test.log 2>&1 & [1] 14349
測(cè)試結(jié)果,直接關(guān)閉終端或者使用exit命令退出終端,程序都會(huì)繼續(xù)執(zhí)行。
使用screen運(yùn)行
# 創(chuàng)建窗口 screen -S test # 運(yùn)行命令,這里可以不用后面的&,只是程序會(huì)把窗口占用 ./test.sh > test.log 2>&1 & # 暫離 Ctrl + a d
這時(shí)候可以直接關(guān)閉終端了,然后重新連接,發(fā)現(xiàn)程序依然在運(yùn)行,如果要找到窗口連接:
# 存在的窗口 [root@localhost ~]# screen -ls There is a screen on: 18048.test (Detached) 1 Socket in /var/run/screen/S-root. # 進(jìn)入窗口 [root@localhost ~]# screen -r test
進(jìn)入之后會(huì)發(fā)現(xiàn),窗口依然保持著暫離之前的狀態(tài),包括之前輸入的程序和命令,當(dāng)你在窗口中輸入exit命令退出窗口,如果你前面命令后面沒(méi)有使用&,程序?qū)?huì)中止,因?yàn)橄鄬?duì)于test窗口來(lái)說(shuō),這是一個(gè)前臺(tái)程序,窗口退出了程序自然就跟著中止了。
因?yàn)閟creen的暫離功能,可以實(shí)現(xiàn)暫離窗口中保持前臺(tái)程序的繼續(xù)運(yùn)行,相對(duì)于真正的終端而言,就相當(dāng)于后臺(tái)運(yùn)行了。
程序終止(interrupt)信號(hào), 在用戶(hù)鍵入INTR字符(通常是Ctrl-C)時(shí)發(fā)出,用于通知前臺(tái)進(jìn)程組終止進(jìn)程 ↩︎
終端連接結(jié)束時(shí)發(fā)出, 通常是關(guān)閉終端, 通知同一session內(nèi)的各個(gè)進(jìn)程組 ↩︎
總結(jié)
以上所述是小編給大家介紹的淺析Linux中使用nohup及screen運(yùn)行后臺(tái)任務(wù)的示例和區(qū)別,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
CentOS6.5與CentOS7 ssh修改默認(rèn)端口號(hào)的方法
這篇文章主要介紹了CentOS6.5與CentOS7 ssh修改默認(rèn)端口號(hào)的方法,結(jié)合實(shí)例形式分別描述了CentOS6.5及CentOS7針對(duì)ssh修改默認(rèn)端口號(hào)的具體操作步驟、相關(guān)命令與使用技巧,需要的朋友可以參考下2018-04-04淺析Linux中vsftpd服務(wù)配置(匿名,用戶(hù),虛擬用戶(hù))
vsftpd 是一個(gè) UNIX 類(lèi)操作系統(tǒng)上運(yùn)行的服務(wù)器的名字,支持很多其他的 FTP 服務(wù)器所不支持的特征。這篇文章主要介紹了Linux中vsftpd服務(wù)配置(匿名,用戶(hù),虛擬用戶(hù)),需要的朋友可以參考下2019-11-11關(guān)于安裝linux redhat后無(wú)法使用yum命令安裝gcc-c++問(wèn)題的解決過(guò)程
這篇文章主要介紹了關(guān)于安裝linux redhat后無(wú)法使用yum命令安裝gcc-c++問(wèn)題的解決過(guò)程,需要的朋友可以參考下2017-08-08Centos7服務(wù)器下啟動(dòng)jar包項(xiàng)目的最佳方法
這篇文章主要給大家分享介紹了關(guān)于Centos7服務(wù)器下啟動(dòng)jar包項(xiàng)目的最佳方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03apache負(fù)載均衡的安裝和實(shí)現(xiàn)方法
在負(fù)載均衡技術(shù)中,硬件設(shè)備是比較昂貴的,對(duì)于負(fù)載均衡的學(xué)習(xí)者如果不是在企業(yè)中應(yīng)用或者是學(xué)員中學(xué)習(xí),很少有機(jī)會(huì)能碰到實(shí)際操作的訓(xùn)練。所以,很多朋友都會(huì)選擇軟件方面的設(shè)置進(jìn)行研究?,F(xiàn)在我們就來(lái)介紹一下再Apache下的Tomcat負(fù)載均衡的一些使用問(wèn)題2012-10-10詳解怎樣在Linux中配置靜態(tài)網(wǎng)絡(luò)連接
這篇文章主要介紹了詳解怎樣在Linux中配置靜態(tài)網(wǎng)絡(luò)連接,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05