真的是逼上梁山,學screen命令n次了,就是記不住,爲什麼,因爲沒有足夠的需求,每次都感覺沒事,可以有別的命令能代替。終於還是坑了自己一把。公司執行一條sql,alert語句,修改表結構!幾百萬條數據,遠程執行,不知道數據量,差點以爲進程假死。又怕遠程斷線,無奈,下次要長記性。
安裝screen
檢查系統時候帶有次命令
[root@localhost ~]# screen -v
Screen version 4.01.00devel (GNU) 2-May-06
centos
yum install screen -y
debian
apt-get -y install screen
啓動一個 screen 會話
可以在命令行中輸入 screen 來啓動它,接着會有一個看上去和命令行提示符一樣的 screen 會話啓動。
screen # 自動開啓的命令
使用描述性名稱啓動屏幕會話是一個很好的做法,這樣你可以輕鬆地記住會話中正在運行的進程。要使用會話名稱創建新會話,請運行以下命令:
screen -S name # name爲自定義的名字
將 “name” 替換爲對你會話有意義的名字。
從 screen 會話中分離
要從當前的 screen 會話中分離,你可以按下 Ctrl-A 和 d。所有的 screen 會話仍將是活躍的,你之後可以隨時重新連接。
PS: 還要一種笨方法,直接斷開ssh連接,再重新連就會看見這個任務了!😛
重新連接到 screen 會話
如果你從一個會話分離,或者由於某些原因你的連接被中斷了,你可以使用下面的命令重新連接:
[root@localhost ~]# screen -r
There are several suitable screens on:
117379.mysql (Detached)
117312.pts-0.localhost (Detached)
117256.pts-0.localhost (Attached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
需要指定pid來進入會話
如果你有多個 screen 會話,你可以用 ls 參數列出它們。
[root@localhost ~]# screen -ls
There are screens on:
117379.mysql (Detached)
117312.pts-0.localhost (Detached)
117256.pts-0.localhost (Attached)
3 Sockets in /var/run/screen/S-root.
重新連接
- 指定pid
[root@localhost ~]# screen -r 117312
- 指定別名
[root@localhost ~]# screen -r mysql
- 快捷方式(當只有一個後臺時)
[root@localhost ~]# screen -x
- 問題
當有時不確定,在一個screen裏再screen,就會出現多個Attached,再次連接其中一個screen時報錯
重新attach失敗:There is no screen to be resumed matching
這時可以使用
[root@localhost ~]# screen -d 117312 # 這裏的117312是無法進入的screen 的pid
然後就可以再次進入,使用screen -r 117312
重新進入
當不清楚所在環境時,將所有會話都變爲Detached模式(screen -d pid),可以有利於分清所在環境
判斷當前窗口
(Detached)表示此窗口在後臺運行
(Attached)表示你當前在此窗口,當你不確定你是在screen裏時,可以這麼判斷
在我們的例子中,我們有三個活躍的 screen 會話。因此,如果你想要還原 “session2” 會話,你可以執行:
screen -r 115276
也可以指定名字
screen -r -S mysql # 可以不用-S參數
screen -r mysql # 親測有效
當只有一個screen會話窗口在後臺時,可以用快捷命令:
screen -x
中止 screen 會話
有幾種方法來中止 screen 會話。你可以按下 Ctrl+d,或者在命令行中使用 exit 命令。
PS:ctrl + d 這個可以在很多命令行使用,退出mysql,退出當前用戶,退出python環境#不用使用exit()#
要查看 screen 命令所有有用的功能,你可以查看 screen 的 man 手冊。