Linux使用screen实现进程守护

需求

在使用 SSH 或者telent 远程登录到Linux 服务器,运行一些需要很长时间才能完成的任务或者必须要长期不间断执行的任务(比如系统备份、ftp 传输、挖矿等等)时,这些任务的共同点就是执行时间长,我们必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,如果因为网络异常或其它因素导致突然断开连接,远程命令也会停止,只能重新连接后再运行,一切半途而废了。所以进程守护是非常重要的,它能够保证在断开SSH或Telent后仍然继续执行进程。

我在使用vps尝试体验一下挖矿过程时,便遇到了上面提到的问题:晚上11点正式部署好了程序,也能正常执行,于是就断开连接、笔电关机。第二天 早上一看,挖矿进程已经停止了,于是便知道了自己的疏忽并及时找到了本文的解决方法,在此记录。

screen的安装

CentOS系统可以执行:yum install screen

Debian/Ubuntu系统执行:apt-get install screen

简单使用

  • 输入screen进入到screen的控制台窗口。
  • 执行命令。
  • 按键盘的ctrl + a,再按下键盘d,退出screen窗口,左下角可以看到提示。
  • 查看当前有哪些screen任务:执行screen -ls或者screen -list     执行结果的第一串数字就是进程id。
  • 恢复命令执行界面: 执行screen -r+进程id    eg:screen -r 15328
  • 关闭screen的会话:执行:exit ,会提示:[screen is terminating],表示已经成功退出screen会话。

screen参数

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

常用快捷键

  • Ctrl+a c :在当前screen会话中创建窗口
  • Ctrl+a w :窗口列表
  • Ctrl+a n :下一个窗口
  • Ctrl+a p :上一个窗口
  • Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换