你应该也遇到过在远程服务器上跑sql脚本或编译某软件时网络异常断开的情况,这时怎么办?重新连上服务器回滚后再执行一次?是不是太low了!screen工具就能优雅的解决这个问题,下面我们假设小明在远程服务器上编译nginx来熟悉下screen的使用方式。
小明拿到服务器后发现没有安装screen,于是他执行了下面命令
yum install screen
安装好screen后直接执行screen命令就能启动一个新会话,但小明没有这样做,因为直接执行screen命令,这个会话是没有名字的,为了区分多个会话,所以要加个大S参数。
screen -S nginx
进入新会话后就可以放心的编译nginx了,小明在nginx源码目录执行 ./configure && make && make install 命令,终端开始快速滚动一行行字符,就像黑客帝国里画面一样,小明端起茶杯嘴角露出幸福的笑容。他旁边工位的大壮要他看下服务器配置,小明放下茶杯,在键盘上按下快捷键用来临时退出会话:
ctrl + a d (同时按ctrl+a再按d)
小明把服务器配置告诉大壮后,需要重新连上会话检查下编译进度,小明执行下面命令查看会话列表,虽然小明知道这是台新服务器,暂时只有他知道账号密码,但作为一个资深运维,他一直保持着一份严谨。
screen -ls
果然只有个nginx会话,小明执行下面命令重新连上nginx会话,终端上还在哗啦啦的输出编译信息。
screen -r nginx
不幸的是这时网络断了,同一排工位DBA胖磊,一脸懵逼看着已断开连接的xhell连说了几个“靠”,小明嘴角又露出了幸福的笑容,他断定胖磊在跑sql时没有用screen。
网络恢复后,小明远程上服务器,在服务器上用screen -ls 看了下nginx会话任然在,只是Detached变为Attached,小明加了个 d 选项强制进入了nginx会话,发现nginx以及编译完成。
screen -rd nginx
小明启动nginx服务,测试nginx服务已经能正常运行,用exit退出了screen的nginx会话,拿起茶杯走到饮水机旁边把水续上,顺便瞄了眼正在回滚数据满头大汗的胖磊。
几天后大壮接手了小明搭建的nginx服务器,但是大壮把一些配置搞错了,导致nginx服务起不来,小明在服务器上执行screen -S nginx命令,然后让大壮连上同一台服务器后执行下面命令。
screen -x nginx
此时神奇的事情发生了,小明在终端上的操作大壮的终端上也同屏显示,大壮心里暗自佩服,对小明做了666的手势。
补充
ctrl+s可以锁定终端,ctrl+q解锁终端
总结
screen -S nginx
screen -r nginx
screen -rd nginx
ctrl+a d
领取专属 10元无门槛券
私享最新 技术干货