五種方法維持遠程服務器的session在斷開鏈接後不被中斷(詳細解釋)

簡介

  簡單來講,SSH或Secure Shell是一種遠程訪問其餘系統上的另外一個用戶的方法,但只能在命令行即非GUI模式下進行。當咱們在遠程計算機上運行命令時,它實際上會建立一個僞終端,並將其附加到登陸用戶的登陸shell中。
  當咱們退出會話或會話閒置一段時間後超時時,SIGHUP信號將發送到僞終端,而且中止在該終端上運行的全部任務。
  但有時候咱們須要程序保持在服務器上運行,此時就須要斷開鏈接後保持程序運行這一技巧了。
  一個經常使用的命令ps -ef | grep xxx,用於查詢當前進程。如查詢python執行的程序$ ps -ef | grep python


python

linux進程

Normal Proces

  正常進程是指具備會話壽命的過程。它們在會話期間做爲前臺進程啓動,並在特定時間段內或會話註銷後結束。這些進程的全部者是系統的任何有效用戶,包括root。linux

Orphan Process

  父進程建立進城後,父進程意外終止,從而使init成爲該進程的父進程。這樣的進程將init做爲其直接父級,init等待這些進程死亡或結束。shell

Daemon Process

  此類進程是一些故意孤立的進程,這些故意留在系統上運行的進程稱爲守護程序或故意孤立的進程。
  此類進程一般是長時間運行的進程,一旦啓動,便會與任何控制終端分離,以便它們能夠在後臺運行,直到沒法完成,不然最終會引起錯誤。這些進程的父進程有意終止,以便子進程在後臺執行。
bash

保持ssh session在斷開鏈接後保持運行的五種方法

1. 使用screen session

  screen是 Linux 的文本窗口管理器,它容許用戶服務器

  • 同時管理多個終端會話
  • 在會話之間切換
  • 記錄會話運行的輸出結果
  • 隨時恢復會話,而沒必要擔憂會話被註銷或終端關閉。

  screen sessions能夠在啓動後從控制終端分離,從而在後臺運行,並能夠隨時在任何地點恢復。啓動screen session後可將其從僞終端(或控制終端)中分離出來。以後從新登陸時恢復會話查看運行結果。


步驟


session

  1. 啓動screen session:(鏈接服務器,)bash鍵入screen
  2. 此時bash的命令已經不會由於關閉bash而中斷
  3. 鍵入Ctrl+a then d來分離這一段輸入的命令。
    此時你能夠安心關閉遠程鏈接了
  4. (從新登陸服務器)使用screen -r從新打開你的screen session

幾個screen經常使用命令ssh

命令 說明
screen 建立一個screen session
screen -ls 列舉當前screen session
screen -list 同上
screen -r [session] 恢復screen session並顯示期間輸出
ctrl+ a+ d 退出當前screen session
screen -X -S [session] kill kill某個screen session
screen -X -S [session] quit 完全kill某個screen session
screen -S session -X quit 同上

2. 使用Tmux(Terminal Multiplexer)

  詳細瞭解Tmux用法移步here
  Tmux 做爲screen的替代品而生,它具備screen的大部分功能且進行了必要而少許的功能增添,這使得它輕便而強大。
  除了screen提供的全部選項,Tmux容許在多個窗口之間水平或垂直拆分窗格、調整窗口窗格的大小、會話活動監視、使用命令行模式編寫腳本等。因爲 Tmux 的這些功能十分好用,幾乎全部 Unix 發行版普遍內嵌了Tmux。


步驟




ide

  1. 啓動Tmux session:(鏈接服務器,)bash鍵入tmux
  2. 此時bash的命令已經不會由於關閉bash而中斷
  3. 使用tmux detachCtrl+b then d來分離這一段輸入的命令。
    此時你能夠安心關閉遠程鏈接了
  4. (從新登陸服務器)使用tmux attach從新打開你的screen session

3. 使用nohup命令

  使用 nohup 命令,咱們告訴進程忽略 ssh 會話在終止時發送的 SIGHUP 信號,從而使命令即便在會話註銷後仍會保留。在會話註銷時,該命令從控制終端中分行,並做爲守護進程在後臺繼續運行。
語法:
ui

nohup your_command &

回車後會給出一個id,重登陸時使用fg %your_id來進入以前的sessionspa

4. 使用disown命令

  disdown從系統的流程session列表中刪除當前session,所以進程在bash關閉後不會被終止,由於它不會收到 shell 的 SIGHUP。
此方法的缺點是程序不能與stdin和 stdout交互(固然你能夠重定向輸入和輸出),當session嘗試與 stdin 或 stdout 交互時,進程就會中止。
語法:

diswon your_command

4. 使用setsid命令

  能夠認爲setsid時nohup命令的改良版本。nohup 有一個缺點——執行命令的進程組不變,所以使用 nohup 執行的命令容易受到影響,而setsid命令的進程組時能夠變化的,規避了nohup的缺點。
語法與nohup相似。
語法:

setsid your_command

須要說明的是,nohup, disdown, setsid均可以重定向輸入輸出。

相關文章
相關標籤/搜索