一、nohup 的安装和使用
1、安装 nohup
一般来说 nohup 系统都会自带,如果系统没有,需要进行安装:
debian/Ubuntu
apt-get install -y nohup
CentOS
yum install -y nohup
2、使用 nohup
列如想后台运行一个 python 程序 test.py,那么命令如下:
nohup python test.py &
注意别漏了 & 这个符号。&代表一直在后台运行
查看所有后台任务:
jobs
返回到对应的任务:
fg %2020 #
其中 2020 是编号
二、screen 的安装和使用
1、安装 screen
Ubuntu / Debian:
apt-get install -y screen
CentOS:
yum -y install screen
2、使用 screen
新建 screen 任务:
screen -S test #test为任务名
查看所有运行中的screen任务:
screen -ls
返回某个screen任务:
screen -r test #test是任务名称,也可以输入对应的 ID
三、两者对比
1、使用 nohup command & 方式时,如果 ssh 突然断开了,那么再登陆到系统的时候,执行 jobs 就不会发现刚才的 job 的编号了。但是 command 会继续执行,直到完成脚本的内容。
2、使用 screen 方式执行脚本,然后按键 Ctrl+a+d 暂时断开后,即使 ssh 会话断了,使用 screen -r 也是能恢复到之前的会话中的。当然脚本内容也会直到执行完成。
四、使用过程中问题描述与分析
之前介绍过,在进行耗时操作时,我们可以用 screen -S 命令开启一个新的窗口,例如 screen -S test,之后如果因为意外断线导致连接中断时,我们只需要重新 SSH 到服务器,使用 screen -r test 恢复窗口即可。这里的 test 是窗口的名字。
今天博主在使用 screen -r 恢复会话时,出现了这个错误,错误提示:
There is a screen on:
2876.test (Attached)
There is no screen to be resumed matching test.
根据错误的提示,test 这个窗口确实是存在的,但是处于被占用的状态(attached),这种情况可能是因为其它人正使用这个会话,或者之前因为 SSH 超时等原因导致会话未正常退出,所以无法再次进入。
问题解决:
解决办法也很简单,我们需要使用 -d 来把这个 screen 窗口给 detach 掉就行,例如我这里的命令需要改成:
screen -r -d 2876
其中 2876 是使用 screen -r 提示的窗口编号。这样就能正常恢复这个窗口了。
暂无评论内容