screen是一款由GNU計劃開發的用於命令行終端切換的自由軟體。用戶可以通過該軟體同時連接多個本地或遠程的命令行會話,併在其間自由切換。GNU Screen可以看作是視窗管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。 screen重要性 screen的重要性,主要是體現在它 ...
screen是一款由GNU計劃開發的用於命令行終端切換的自由軟體。用戶可以通過該軟體同時連接多個本地或遠程的命令行會話,併在其間自由切換。GNU Screen可以看作是視窗管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。
screen重要性
screen的重要性,主要是體現在它可以方便的在伺服器上一直運行,只要伺服器沒有宕機,沒有斷電它就可以做到不用停止。其實後端工程師經常會遇到,要通過執行腳本處理一些數據,但這個腳本可能需要執行半天或者幾天,screen就是最佳選擇了,過一段時間登錄到伺服器上查看下運行狀態,是否運行完成。沒有完成掛起來繼續運行。
screen 常用的參數
screen 命令參數很多,我們只看下平常用的比較多的幾個
參數 | 說明 |
---|---|
ls | 列出當前所有的回話 |
S | 大寫的S,新建一個名稱是xxx的會話 |
r | 通過序號連接進程會話 |
d | detach斷開某個會話 |
D | 與-d命令相同,但是會logout原來在screen里的用戶 |
在每個screen 會話下,所有命令都以 ctrl+a開始的
參數 | 說明 |
---|---|
ctrl+a d | detach會話,將目前的 screen session 丟到後臺執行,並會回到還沒進 screen 時的狀態,screen 都在繼續執行,即使 logout 也不影響後臺的執行 |
ctrl+a k | 強行關閉當前的視窗 |
ctrl+a z | 把當前的會話放到後臺執行,用fg命令可以調回來 |
screen 使用
先模擬一個需要執行很長時間的腳本代碼
test.php
<?php
sleep(10000);
echo 111;
?>
程式休眠10000秒之後輸出 1111
先創建一個screen,然後執行它之後,退出登錄狀態
screen -S test
php test.php
創建名為test的screen,進入screen之後執行test.php。然後讓腳本在 screen裡面一直執行,按 Ctrl+a d讓腳本在screen後臺執行。
screen -S test
[detached from 3934.test]
exit 退出登錄,等一段時間然後再登錄上去,查看下腳本是否還在執行
ssh
screen -ls
There are screens on:
3934.test (02/25/2020 10:27:06 PM) (Detached)
名為test的screen ID 為3934,連接該screen併進入
screen -r 3934
php test.php
可以看到 test.php的腳本還在執行。
執行ctrl+a z,然腳本在後臺執行,然後再使用fg調到前臺
[1]+ Stopped screen -r 3934
執行fg
php test.php
再看下screen -d 和 -D
重新打開一個視窗,ssh之後,執行
screen -d 3934
[3934.test detached.]
然後查看前一個視窗,看看是否斷開了screen
screen -r 3934
[remote detached from 3934.test]
再看下,-D,在第一個視窗
screen -r 3934
第二個視窗執行-D
screen -D 3934
[3934.test power detached.]
再看第一個視窗已經被強制退出登錄了。
screen -r 3934
[remote power detached from 3934.test]
Connection to 127.0.0.1 closed.
作為開發人員,其實平常開發中只需要知道三個命令就能滿足90%以上的使用範圍了
screen -ls
screen -S
screen -R
ctrl+a d