linux ssh 远程会话保存,远程SSH会话和流程在断开后运行的5种方法
SSH或安全Shell簡(jiǎn)單來(lái)說(shuō)就是一個(gè)人可以遠(yuǎn)程訪問(wèn)其他用戶的其他系統(tǒng),但僅在命令行即非GUI模式的方法。 在更多的技術(shù)術(shù)語(yǔ)中,當(dāng)我們ssh到其他用戶在某些其他系統(tǒng)上并在該機(jī)器上運(yùn)行命令時(shí),它實(shí)際上創(chuàng)建一個(gè)偽終端并將其附加到登錄用戶的登錄shell。
斷開連接后SSH會(huì)話運(yùn)行的5種方法
當(dāng)我們退出會(huì)話或會(huì)話超時(shí)閑置一段時(shí)間后,將SIGHUP信號(hào)發(fā)送到偽終端以及所有已在該終端上運(yùn)行的作業(yè),甚至有自己的父作業(yè)的作業(yè)在偽終端上發(fā)起的也被發(fā)送SIGHUP信號(hào)并被強(qiáng)制終止。
只有配置為忽略此信號(hào)的作業(yè)才能在會(huì)話終止后生存。 在Linux系統(tǒng)上,我們可以有許多方法使這些作業(yè)在遠(yuǎn)程服務(wù)器或任何計(jì)算機(jī)上運(yùn)行,??即使在用戶注銷和會(huì)話終止之后。
了解Linux上的進(jìn)程
正常過(guò)程
正常過(guò)程是具有會(huì)話的壽命的過(guò)程。 它們?cè)跁?huì)話期間作為前臺(tái)進(jìn)程啟動(dòng),并在特定時(shí)間跨度或在會(huì)話注銷時(shí)結(jié)束。 這些進(jìn)程的所有者是系統(tǒng)的任何有效用戶,包括root用戶。
孤立進(jìn)程
孤立進(jìn)程是最初有父進(jìn)程創(chuàng)建進(jìn)程的進(jìn)程,但在一段時(shí)間后,父進(jìn)程無(wú)意中死亡或崩潰,使init成為該進(jìn)程的父進(jìn)程。 這樣的進(jìn)程使init作為其直接父進(jìn)程,等待這些進(jìn)程直到它們死亡或結(jié)束。
守護(hù)進(jìn)程
這些是一些有意孤立的進(jìn)程,這些有意在系統(tǒng)上運(yùn)行的進(jìn)程稱為守護(hù)程序或有意孤立的進(jìn)程。 它們通常是長(zhǎng)時(shí)間運(yùn)行的進(jìn)程,它們一旦啟動(dòng),然后從任何控制終端分離,以便它們可以在后臺(tái)運(yùn)行,直到它們沒(méi)有完成,或者最終引發(fā)錯(cuò)誤。 這種過(guò)程的父母故意使孩子在后臺(tái)執(zhí)行。
斷開連接后保持SSH會(huì)話運(yùn)行的技術(shù)
在斷開連接后,可以有多種方法使ssh會(huì)話運(yùn)行,如下所述:
1.使用屏幕命令保持SSH會(huì)話運(yùn)行
屏幕是Linux的一個(gè)文本窗口管理器,它允許用戶管理在同一時(shí)間多個(gè)終端會(huì)話,會(huì)話之間切換,會(huì)話日志記錄在屏幕上運(yùn)行會(huì)議,甚至可以恢復(fù)屆,我們無(wú)需擔(dān)心會(huì)話所需的任何時(shí)間被記錄輸出或端子閉合。
屏幕會(huì)話可以開始,然后從控制終端分離,使它們?cè)诤笈_(tái)運(yùn)行,然后在任何時(shí)間甚至在任何地方恢復(fù)。 只需要在屏幕上啟動(dòng)會(huì)話,并在需要時(shí)將其從偽終端(或控制終端)分離并注銷。 當(dāng)你感覺(jué)到,你可以重新登錄并恢復(fù)會(huì)話。
啟動(dòng)屏幕會(huì)話
鍵入“屏幕”命令后,你將在一個(gè)新的屏幕會(huì)話,本次會(huì)議中,您可以創(chuàng)建新的窗口,遍歷窗口之間,鎖定屏幕,并做更多的東西,你可以正常的終端上做的。$ screen
在Linux中啟動(dòng)屏幕會(huì)話
一旦屏幕會(huì)話啟動(dòng),您可以運(yùn)行任何命令,并通過(guò)分離會(huì)話來(lái)保持會(huì)話運(yùn)行。
在屏幕會(huì)話中運(yùn)行命令
分離屏幕
只是當(dāng)你想退出遠(yuǎn)程會(huì)話,但你想保持在該機(jī)器上創(chuàng)建的會(huì)話活著,那么你只需要做的是將屏幕從終端分離,以便它沒(méi)有控制終端。 這樣做后,您可以安全地注銷。
從遠(yuǎn)程終端分離屏幕,只要按下“Ctrl+a”后面緊跟著“d”您將回到碼頭看到,屏幕上是分離的消息。 現(xiàn)在您可以安全地注銷,您的會(huì)話將保持活動(dòng)狀態(tài)。
分離Linux屏幕會(huì)話
恢復(fù)分離屏幕會(huì)話
如果你想恢復(fù)您注銷前留下了分離屏幕會(huì)話,只需再次重新登錄到遠(yuǎn)程終端輸入“screen -r”如果只有一個(gè)屏幕打開的情況下,如果多屏?xí)淮蜷_運(yùn)行“screen -r ”$ screen -r
$ screen -r
恢復(fù)分離屏幕會(huì)話
要了解更多關(guān)于屏幕的命令,以及如何使用它只是按照鏈接: 使用屏幕命令管理Linux終端會(huì)話
2.使用Tmux(終端復(fù)用器)保持SSH會(huì)話運(yùn)行
TMUX是創(chuàng)建的,是用于屏幕更換另一個(gè)軟件。 它擁有的大部分屏幕的能力,很少有額外的功能,這使得它比屏幕上更強(qiáng)大。
除了屏幕提供的所有選項(xiàng)之外,它允許在多個(gè)窗口之間水平或垂直分割窗格,調(diào)整窗口窗格大小,會(huì)話活動(dòng)監(jiān)視,使用命令行模式的腳本等。由于tmux的這些特性,它已被近乎所有的Unix發(fā)行版,甚至已經(jīng)包含在OpenBSD的基本系統(tǒng)中。
啟動(dòng)Tmux會(huì)話
在遠(yuǎn)程主機(jī)并輸入TMUX做SSH之后,你將進(jìn)入一個(gè)新的會(huì)話使用一個(gè)新窗口打開在你的面前,其中你可以做任何你一個(gè)正常的終端上完成。$ tmux
啟動(dòng)tmux終端會(huì)話
在終端上執(zhí)行操作后,您可以從控制終端分離該會(huì)話,使其進(jìn)入后臺(tái),您可以安全地注銷。
在Tmux會(huì)話中執(zhí)行Linux命令
從終端分離Tmux會(huì)話
要么你可以運(yùn)行“tmux detach”運(yùn)行TMUX會(huì)話,也可以使用快捷鍵(Ctrl+b then d) 之后,您當(dāng)前的會(huì)話將分離,您將回到您的終端,從那里你可以安全地注銷。$ tmux detach
在Linux中分離Tmux會(huì)話
恢復(fù)關(guān)閉的Tmux會(huì)話
要重新打開會(huì)話,你超脫,保持不變,當(dāng)你退出系統(tǒng),只需重新登錄到遠(yuǎn)程計(jì)算機(jī),然后鍵入“TMUX重視”重新連接到關(guān)閉會(huì)話,它將會(huì)依然存在并運(yùn)行。$ tmux attach
恢復(fù)Tmux關(guān)閉會(huì)話
要了解更多關(guān)于TMUX以及如何使用它只是按照鏈接: 使用TMUX終端復(fù)用器管理多個(gè)Linux的終端 。
3.使用nohup命令保持運(yùn)行SSH會(huì)話
如果您不熟悉的屏幕或TMUX,你可以使用的nohup和發(fā)送你的長(zhǎng)期運(yùn)行的命令的背景,這樣就可以繼續(xù),而該命令將繼續(xù)在后臺(tái)執(zhí)行。 之后,您可以安全地注銷。
隨著nohup命令我們告訴這個(gè)過(guò)程要忽略的是通過(guò)SSH會(huì)話發(fā)送終端上,從而使該命令的SIGHUP信號(hào)堅(jiān)持,即使會(huì)話注銷后。 在會(huì)話注銷時(shí),命令從控制終端中被取消,并作為守護(hù)進(jìn)程在后臺(tái)繼續(xù)運(yùn)行。
在后臺(tái)使用nohup執(zhí)行命令
在這里,是一個(gè)簡(jiǎn)單的場(chǎng)景,其中,我們已經(jīng)運(yùn)行find命令來(lái)搜索文件使用的nohup上的SSH會(huì)話背景,在此之后,任務(wù)被送到背景提示返回,立即給PID和過(guò)程作業(yè)ID ([JOBID] PID) 。# nohup find / -type f $gt; files_in_system.out 2>1 &
在后臺(tái)運(yùn)行Linux命令
恢復(fù)會(huì)話以查看作業(yè)是否仍在運(yùn)行
當(dāng)您再次重新登錄,您可以檢查命令的狀態(tài),通過(guò)將其帶回前臺(tái)'fg %JOBID'來(lái)監(jiān)測(cè)其進(jìn)展情況等。 下面,輸出顯示作業(yè)已完成,因?yàn)樗谥匦碌卿洉r(shí)不顯示,并已給出顯示的輸出。# fg %JOBID
在后臺(tái)運(yùn)行Linux命令
4.使用disown命令保持SSH會(huì)話運(yùn)行
即使會(huì)話注銷后讓你的命令,或者在后臺(tái)單任務(wù)運(yùn)行和另一種優(yōu)雅的方式仍然存活或斷開是使用不認(rèn) 。
不認(rèn) ,從系統(tǒng)中刪除的處理作業(yè)列表中的作業(yè),所以這個(gè)過(guò)程是從會(huì)話斷開時(shí)被殺害,當(dāng)您注銷它不會(huì)被shell收到SIGHUP屏蔽。
這種方法的缺點(diǎn)是,它應(yīng)該只對(duì)那些不需要從標(biāo)準(zhǔn)輸入既不需要任何輸入寫入到標(biāo)準(zhǔn)輸出的作業(yè)中使用的,除非你專門重定向作業(yè)的輸入和輸出,因?yàn)楫?dāng)作業(yè)將嘗試使用標(biāo)準(zhǔn)輸入交互或標(biāo)準(zhǔn)輸出 ,這將暫停。
使用后臺(tái)禁用執(zhí)行命令
下面,我們發(fā)送ping命令來(lái)背景,使UT不斷運(yùn)行,并會(huì)從任務(wù)列表中刪除。 可以看出,這項(xiàng)工作首先暫停后,它仍然在工作清單進(jìn)程ID:15368。$ ping howtoing.com > pingout &
$ jobs -l
$ diswon -h %1
$ ps -ef | grep ping
使用Disown運(yùn)行Linux命令
之后,拒絕信號(hào)傳遞到作業(yè),并從作業(yè)列表中刪除,雖然仍然在后臺(tái)運(yùn)行。 當(dāng)您重新登錄到遠(yuǎn)程服務(wù)器時(shí),作業(yè)仍將運(yùn)行,如下所示。$ ps -ef | grep ping
驗(yàn)證作業(yè)狀態(tài)
5.使用setsid命令使SSH會(huì)話運(yùn)行
另一個(gè)實(shí)用程序來(lái)實(shí)現(xiàn)所要求的行為setsid。NOHUP具有意義上的缺點(diǎn),即該過(guò)程的進(jìn)程組保持相同,以便與nohup的運(yùn)行過(guò)程是易受發(fā)送到的整個(gè)過(guò)程組的任何信號(hào)(例如Ctrl + C ) 。
在另一方面setsid分配正在執(zhí)行一個(gè)新的進(jìn)程組的進(jìn)程,因此,創(chuàng)建的過(guò)程完全是在一個(gè)新分配的進(jìn)程組,可以不用擔(dān)心,甚至?xí)N后被殺安全地執(zhí)行。
使用setsid執(zhí)行任何命令
這里,它示出了該過(guò)程'sleep 10m'已經(jīng)從控制終端拆下,由于時(shí)間已經(jīng)創(chuàng)建。$ setsid sleep 10m
$ ps -ef | grep sleep
使用Setsid運(yùn)行Linux命令
現(xiàn)在,當(dāng)您重新登錄會(huì)話時(shí),您仍然會(huì)發(fā)現(xiàn)此進(jìn)程正在運(yùn)行。$ ps -ef | grep [s]leep
Linux進(jìn)程運(yùn)行背景
結(jié)論
你可以想到什么方法來(lái)保持你的進(jìn)程運(yùn)行,即使你從SSH會(huì)話注銷? 如果有任何其他和有效的方式,你可以想到,請(qǐng)?jiān)谀愕脑u(píng)論中提及。
總結(jié)
以上是生活随笔為你收集整理的linux ssh 远程会话保存,远程SSH会话和流程在断开后运行的5种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 话说毛戈平彩妆贵不贵啊?
- 下一篇: (十一)linux之poll轮询