本文仍在更新,非最终版本。。
结合下文一起使用:

1. nohup,jobs,bg,fg,&用法

# 将命令放入后台执行,终端关闭后命令也关闭 
<terminal order> &

# 命令放入后台执行,终端关闭后命令也关闭
nohup <terminal order> & # nohup会生成一个屏幕记录文件
*Ctrl+Z*# 此命令会停止此进程
bg #此命令保持命令在后台执行
jobs #可看到整整执行的命令号
kill %<number>


# 跨服务器用法
# 此时不能再加& 因为需要输入密码,如果加&会处于空白状态,无法输入服务器密码
nohup <terminal order> #执行并生成nohuop.out屏幕记录文档
# 下一步输入密码及/或二次验证码
<Ctrl+Z #暂停后台运行的job> #有时这行也可省略
bg #将暂停的后台job重新start
jobs #查看正在运行的job
tail -f nohup.out #查看后台运行job的屏幕输出

# 推荐rsync结合使用!!!!!!看这里!!!!!!
screen
nohup rsync -avzu --progress <source_path/files> <destination_path>
bg
# 若bg切不出去,先ctrl+z再bg
tail -f nohup.out #查看后台运行job的屏幕输出

2. tmux

还没试过

3. Screen

开启screen后,系统后台常驻一个ssh命令行界面,可随时关闭或取出,对于长时间的命令操作,且ssh会超时关闭的服务器,推荐先开启一个screen再操作命令。

# 开启一个Screen
screen
#接下来可执行命令,结合nohup+&
# 恢复一个Screen
screen -ls
screen -r <number>

# 杀死screen
如果想杀死一个已经detached的screen会话,可以使用以下命令:

screen -X -S [session # you want to kill] quit
举例如下:

[root@localhost ~]# screen -ls
There are screens on:
        9975.pts-0.localhost    (Detached)
        4588.pts-3.localhost    (Detached)
2 Sockets in /var/run/screen/S-root.

[root@localhost ~]# screen -X -S 4588 quit
[root@localhost ~]# screen -ls
There is a screen on:
        9975.pts-0.localhost    (Detached)
1 Socket in /var/run/screen/S-root.

可以看到,4588会话已经没有了。

4.综合实例

以从Lonestar5服务器向ada服务器拷贝多个文件为例,本例中ada服务器的登录需要密码和二步验证码。
首先ssh登录ls5服务器,如我需要拷贝RCESM模式下的所有文件到ada以进行restart run。

# 到达拷贝目录
cd /scratch/06660/hengkai/WORK/Models/CRESM_new/run
screen # 此时屏幕自动清空并开启了后台的screen窗口
# 执行拷贝并生成nohup.out窗口记录文件
nohup rsync -avzu --progress ./kuro03_20031015_20040330_run06_restart01/{*.nml,*.sh,*_in,*.in,*.input,docn.streams.txt.prescribed,KE03.atm.r.2004-01-13_00_00_00.nc,KE03.cpl.r.2004-01-13-00000.nc,KE03.docn.rs1.2004-01-13-00000.bin,KE03.ocn.r.2004-01-13_00:00:00.nc,*wrfmask*,*.job,rpointer*,varinfo.dat,seq_maps.rc,wrf*} hengkai.yao@ada-ftn1.tamu.edu:/scratch/user/hengkai.yao/WORK/Models/RCESM-1.0.0_zs/run/kuro03_20031015_20040330_run06_restart01

# 此时窗口提示输入密码,则我们输入密码并回车,密码并不显示

# 此时窗口提示选择二步验证方式,我们输入1并回车,在手机上点击通过验证

# 此时窗口空白,我们直接输入
bg
# 1)若此时未退回可输入命令行,则点击;
ctrl+z
bg
# 2)若已退回可输入命令行,则不需要点击ctrl+z,也不需要bg

#查看后台运行job的屏幕输出
tail -f nohup.out # 若拷贝速度持续变化,则正在拷贝,直到完成

参考:
https://www.tecmint.com/keep-remote-ssh-sessions-running-after-disconnection/

https://zhengdl126.iteye.com/blog/1523784

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html

https://www.jianshu.com/p/82fe7f184b93

https://nanxiao.me/kill-detached-screen-session/

Last modification:February 6th, 2020 at 12:36 pm
If you think my article is useful to you, please feel free to appreciate