当我们在本地连接远程linux服务器的时候,常常会担心本地电脑断电或者断网的问题,因为本地电脑一旦出现问题,我们在远程服务器上跑得程序也会自动断开,这会让人十分苦恼,特别是在网络不稳定的环境下。
linux的screen命令很好地解决了这一问题,他类似于在服务器上开一个窗口(虚拟的),只是在我们本地电脑上显示,及时我们本地的电脑关机或者断网,回复之后仍可以连接上服务器的这个窗口,继续之间的结果(严格来说不是继续,因为在本地电脑断开的时候服务器仍然在运行,可以说是继续登录服务器观察运行结果)。
首先,在登录服务器的前提下,linux命令行输入
screen -S name
该命令创建一个名字为"name"的screen窗口,在该窗口下,可以和平常一样操作,然后运行程序。
运行好了,可以直接关掉当前session的窗口或着同时按下ctrl+a+d退出当前的screen。这两种操作模拟了我们断网断电的情况,然而我们运行的程序仍然在服务器端运行着。
输入
screen -ls
可以查看当前在运行的screen。如前面所操作的,我们能看到一个名为"name"的screen。
想恢复这个名为"name"的screen,输入
screen -r name
就可以了。
值得注意的是,如果没有专门的退出操作,这个screen会一直在服务器上进行,想退出这个名为"name"的screen,需要输入
screen -S name -X quit
此外,还可能在恢复screen的时候遇到报错:
There is no screen to be resumed matching XXX
此时需要先输入
screen -d XXX
然后再输入
screen -r XXX
恢复该名为XXX的screen。
参考文献
[1] 哦摩西罗伊,Linux下跑程序,防止命令终断(断网,断电),2019-03-05。
[2] ma_fighting,解决 screen 连接不上,提示“There is no screen to be resumed matching 18352.” 的问题,2019-08-07。