You are currently viewing Screen后台执行,防止VPS SSH链接中断

Screen后台执行,防止VPS SSH链接中断

最近在通过SSH链接VPS执行长时间编译工作时,SSH断开后编译停止导致失败,该如何解决这个问题。

发现通过使用Screen虚拟终端管理器,建立新终端,这样进程就可以保留在后台运行,哪怕SSH断开也不会影响。

安装Screen

sudo apt-get install screen

使用Screen

使用Screen比较简单,只需要掌握建立、查询、切换不同终端命令即可。

首先建立新的终端

screen -S newterminal

-S参数后接新终端的名称,替换newterminal为你想要叫的终端名,例如lede

建立后会自动切换到新终端,此时执行命令就在新终端,并且退出SSH连接后,终端依旧保留后台执行。

列出已创建的终端

再第二次SSH链接VPS后,默认进入系统新建的终端,此时执行命令列出后台执行了终端

screen -ls
列出终端

在图中可以看到我有个两个后台执行的终端和终端开始的时间

切换到运行中终端

接下来切换到后台运行中的终端

screen -r newterminal

newterminal为终端名称,可在列表中查看或者直接输入定义终端时取的名称

终端名称相同怎么办?

可以前面图片看到,我的两个终端都叫做lede,那么这里切换应该如何进入某一个喃。

这里切换时我们需要加上可选参数[pid]

screen -r pid.newterminal

pid的值可以在screen -ls中查看

例如现在我切换到第二个名为lede的终端

通过pid选择同名终端
screen -r 106305.lede

切换后可以看到我的这个进程是昨晚编译openwrt的lede

整个执行时间超过4小时,进入终端后可以看到已经编译完成

切换入后台终端

退出Screen终端

退出Screen中建立的终端,回到SSH默认终端

执行

exit
退出Screen终端

显示screen is terminating 退出screen的终端连接,将会回到SSH默认的终端

其他参数

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业关闭。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

其余详情可以到官网查看

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

发表回复