华为云技术微课堂~如何在关闭ssh连接的情况下,让操作命令继续运行?
这几天在用sysbench工具测试mysql数据的TPS/QPS性能指标,在测试性能之前需要批量导入数据,为了尽可能与阿里云的测试环境一致,创建测试表的数量设置为64个表,每个表要插入1000万条记录,64张表,总共要插入6.4亿条数据,算是大型数据库的规模了。
我在导入数据时候,发现要完成64张表,需要耗时四五个小时,开启SSH窗口,很容易因各种原因退出,好不容易花了几个小时导入了部分数据,被迫停止,必须要重新来一遍,有时候要花好几次才能导入成功。
逼着我想办法解决这个问题。
一顿狂搜,发现:当我们通过SSH去连接linux服务器时,对于长时间执行的命令,如果SSH窗口退出,当前正在执行的命令也会被迫停止,因为linux服务器会在你退出SSH连接后,默认关闭进程,而不会hang up进程。
网上提供了若干种方案,其中screen的方式有一定的交互性,采用了Screen软件解决了这个棘手的问题。
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
准备:在华为云门户开通1台操作系统为centos7.4(64bit)的云主机。
1、安装screen
#yum install screen
2、创建screen会话,可自定义screen虚拟终端的名称<name>
#screen -S <name>
3、查看创建的screen会话
#screen -ls
输入screen -ls,列出了所有的screen会话,其中cloudtest是刚创建的会话名称,6673是会话的id号。
3、运行你需要一直在后台运行的程序
ping 192.168.1.187 # 这里用长ping作为后台运行的命令
4 退出SSH窗口,退出前ping命令执行到icmp的序号为6,如上图所示。
5 重新远程登陆,恢复运行ping命令的screen会话
#screen -r cloudtest
此时ping仍在后台运行,icmp的序号已经执行到687
附:screen用法:
* 打开新的会话窗口:screen
* 结束当前会话:exit
* 在新会话中执行程序(程序关闭时会话自动结束):screen vi test.c
* 打开新会话并起个名字:screen -S myname
* 暂时离开会话(经常用):Ctrl+a 然后 d
* 查看会话列表: screen -ls
* 恢复之前离开的会话:screen -r 会话名或进程号
* 清除dead状态的会话:screen -wipe
* 启动一个开始就是Detached状态的会话:screen -dmS 名字 命令
- 点赞
- 收藏
- 关注作者
评论(0)