Linux中使用disown实现scp后台传输
Linux中使用disown实现scp后台传输
1. 启动文件传输
从node1服务器将一个目录传输到node2服务器:
[root@node1 ~]# scp -r /data/software/ 192.168.1.32:/data/software/
reverse mapping checking getaddrinfo for unknown-host failed - POSSIBLE BREAK-IN ATTEMPT!
root@192.168.1.32's password:
...
app.jar 100% 84KB 83.8KB/s 00:00
config.xml 100% 16KB 16.1KB/s 00:00
2. 暂停当前任务
按下Ctrl+Z组合键暂停正在运行的传输任务:
[1]+ Stopped scp -r /data/software/ 192.168.1.32:/data/software/
[root@node1 ~]#
此时可以查看当前被暂停的任务:
[root@node1 ~]# jobs
[1]+ Stopped scp -r /data/software/ 192.168.1.32:/data/software/
[root@node1 ~]#
3. 将任务转入后台
使用bg命令将任务编号为1的任务转入后台运行:
[root@node1 ~]# bg %1
[1]+ scp -r /data/software/ 192.168.1.32:/data/software/ &
再次查看任务状态,确认已在后台运行:
[root@node1 ~]# jobs
[1]+ Running scp -r /data/software/ 192.168.1.32:/data/software/ &
4. 使任务忽略挂断信号
使用disown命令让该任务忽略HUP信号,这样即使终端关闭,任务也会继续运行:
[root@node1 ~]# disown -h %1
[root@node1 ~]# jobs
[1]+ Running scp -r /data/software/ 192.168.1.32:/data/software/ &
查看进程运行状态和父进程ID:
[root@node1 ~]# ps -ef|grep scp
root 12704 12638 0 05:19 pts/0 00:00:01 scp -r /data/software/ 192.168.1.32:/data/software/
root 12705 12704 8 05:19 pts/0 00:00:17 /usr/bin/ssh -x -oForwardAgent no -oPermitLocalCommand no -oClearAllForwardings yes 192.168.1.32 scp -r -t /data/software/
root 12823 12638 0 05:22 pts/0 00:00:00 grep scp
5. 验证会话断开后任务继续运行
退出当前会话,测试任务是否能在后台继续运行:
[root@node1 ~]# exit
logout
Last login: Thu Jan 5 05:19:50 2017 from 192.168.1.198
[root@node1 ~]#
[root@node1 ~]#
[root@node1 ~]#
[root@node1 ~]# ps -ef|grep scp
root 12704 1 0 05:19 ? 00:00:02 scp -r /data/software/ 192.168.1.32 /data/software/
root 12705 12704 8 05:19 ? 00:00:17 /usr/bin/ssh -x -oForwardAgent no -oPermitLocalCommand no -oClearAllForwardings yes 192.168.1.32 scp -r -t /data/software/
root 12854 12829 0 05:22 pts/2 00:00:00 grep scp
可以看到,scp任务仍在继续运行,没有因为会话断开而中断,其父进程ID已经变为1(init进程)。
补充说明
如果需要将其他命令在后台运行但忘记使用nohup,也可以采用此方法。
如果已配置SSH无密码登录,也可以直接使用 nohup scp ... & 命令实现后台传输。