大家在起后臺(tái)服務(wù),或者長(zhǎng)時(shí)間執(zhí)行某個(gè)腳本的時(shí)候。
是不是感覺,交互性很差,
有時(shí),想把結(jié)果直接在終端上輸出,又怕不小心關(guān)閉了終端導(dǎo)致進(jìn)程退出? (有些sshd服務(wù)還會(huì)設(shè)置連接超時(shí),自動(dòng)退出終端)
現(xiàn)在用 screen
這個(gè)指令可以很好的解決跑后臺(tái)服務(wù)的尷尬。
命令其實(shí)超簡(jiǎn)單的:
直接在終端上輸入 screen , 這個(gè)時(shí)候,服務(wù)器端會(huì)啟一個(gè)新的終端,但這個(gè)終端,與之前的普通終端不一樣,它不隸屬于 sshd 進(jìn)程組,這樣,當(dāng)本地終端關(guān)閉后,服務(wù)器終端不會(huì)被 kill。
當(dāng)然,優(yōu)點(diǎn)還不止這么些,在服務(wù)器終端里執(zhí)行任務(wù)時(shí),你甚至可以隨時(shí)地切換到本地終端做些其他事情,然后,要回去時(shí),再恢復(fù)到剛才已經(jīng)打開的服務(wù)器終端里,如果剛才的任務(wù)沒有結(jié)束,還可以繼續(xù)執(zhí)行任務(wù)。
操作步驟:
首先,進(jìn)入 screen
-S sessionname終端。(sessionname是為了分辨你的session)
然后按 ctrl + a
,再按 d
鍵暫時(shí)退出終端。
當(dāng)要返回時(shí), 先查看剛才的終端進(jìn)程ID, screen -list
或直接
screen -r xx
(剛才的sessionname)就可以了
當(dāng)然,當(dāng)你開了很多個(gè)session后,打算關(guān)閉幾個(gè)session,可以進(jìn)入到session后,exit
一下就可以了.
總的來說, screen是可以完全替代 nohup 的,并且本身提供了較復(fù)雜的功能,但是我認(rèn)為,剛才那些簡(jiǎn)單的功能足以應(yīng)付日常運(yùn)作。
如果對(duì)該指令感興趣的朋友,推薦一篇文章:
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
補(bǔ)充:
A: secureCRT鏈接linux服務(wù)器時(shí),網(wǎng)絡(luò)斷線了,但是服務(wù)器上的tty還沒退出,我想重新連接到原來那個(gè)tty,可以做到么?
B: 可以啊,你可以安裝一個(gè)Screen,就可以享受他給你帶來的方便了。
A:如何創(chuàng)建一個(gè)虛擬shell環(huán)境?
B:screen -S MyScr (其中“MyScr”是你為這個(gè)虛擬shell環(huán)境起的名字,可以自定義)
輸入回車之后,你就可以在這個(gè)虛擬的shell環(huán)境中工作了,你工作的內(nèi)容都會(huì)被一直保留下來。試試吧,在里面敲幾個(gè)命令,運(yùn)行幾個(gè)程序,和平常沒有兩樣吧。
A: 如何退出工作環(huán)境呢?
B:如果想要退出要怎么辦呢?只要按下Ctrl+A,然后按d,就可以退出剛剛建立的虛擬shell環(huán)境了(名字是MyScr)
若干時(shí)間后,你又想繼續(xù)剛才的工作了,只要再敲:
screen -r MyScr
就可以看到剛剛的界面了。怎么樣,還是很簡(jiǎn)單適用的吧,呵呵。
A: 可以不給他起名么?
B:當(dāng)然,你不給這個(gè)虛擬shell環(huán)境命名也是沒問題的,如果只有一個(gè)虛擬環(huán)境的話,也可以這樣用
screen(回車)
工作……退出……
screen -r
繼續(xù)工作
系統(tǒng)還會(huì)默認(rèn)用PID號(hào)碼表識(shí)screen虛擬的shell環(huán)境。
例如,我直接用screen命令建立了一個(gè)虛擬環(huán)境,退出之后,我想查看虛擬環(huán)境的情況:
A:如何察看當(dāng)前有哪些Screen工作環(huán)境呢?
B:screen -list
輸出應(yīng)該是類似下面的:
There is a screen on:
25202.pts-1.firewallX (Detached)
1 Socket in /tmp/screens/S-root.
其中:
“25202”是這個(gè)虛擬環(huán)境的PID。不信的話,可以ps查看一下,呵呵~
“pts-1”是說你的ssh客戶端登錄的系統(tǒng)端口號(hào)是pts-1
“firewallX”是我這臺(tái)主機(jī)的名字
如果你建立了很多虛擬環(huán)境,又沒有為他們命名的話,就只能用PID來識(shí)別他們了。(記住這個(gè)PID號(hào)碼太煩了吧,還是名字好!)
例如,我現(xiàn)在有兩個(gè)screen建立的虛擬環(huán)境,我輸入:
screen -list
輸出為:
There are screens on:
25202.pts-1.firewallX (Detached)
25403.pts-1.firewallX (Detached)
2 Sockets in /tmp/screens/S-root.
那么,我如果想進(jìn)入第二個(gè)虛擬環(huán)境的話,我可以用什么命令呢?答案如下:
screen -r 25403
A:如何創(chuàng)建新的screen呢?
B:如果我登錄進(jìn)去之后,用ctrl-a c:再創(chuàng)建一個(gè)新的虛擬Shell環(huán)境,那么這個(gè)環(huán)境就是在PID為25403的虛擬環(huán)境里面的子虛擬環(huán)境。
A:如何徹底退出一個(gè)screen工作環(huán)境呢?
B:Ctrl-D
A:如何在進(jìn)入工作環(huán)境的時(shí)候就自動(dòng)的運(yùn)行screen呢?
B:可以在~/.bash_profiler里最下面一行添加一句screen
注意事項(xiàng):關(guān)閉secureCRT之前,請(qǐng)先使用 Ctrl-D 退出screen