scp命令放后台运行
若使用bbcp可以参考:https://www.xmmup.com/biscpgengkuaidechuanshugongjubbcpjieshao.html
1、使用nohup和&命令
通常需要后台运行任务时,nohup 是最自然而然想到的工具,但 scp 想要使用 nohup 后台运行需要有一个额外的工作需要做,那就是需要解决两台服务器之间需要输入密码验证的问题。可以配置互信,然后再使用 nohup 启动即可。
2、使用bg和disown命令
scp放后台运行,总体过程:
1 2 3 4 5 | scp xxxx ctrl + z jobs bg %1 disown -h %1 |
当然你也可以使用下面的命令查看后台任务或者将任务切换到前台:
jobs //查看任务,返回任务编号n和进程号
bg %n //将编号为n的任务转后台运行
fg %n //将编号为n的任务转前台运行
ctrl+z //挂起当前任务
ctrl+c //结束当前任务
注意:直接关闭命令行会结束后台正在执行的进程,在执行exit退出命令后不影响后台执行的进程。
使用disown -h 将这个作业忽略HUP信号
若文件比较大,使用scp,前台跑经常超时,那么使scp放后台跑完成相关的文件传输:
1 | scp -l 40200 FULLBAK_20210507_6448_1.DBFILE 192.168.1.31:/oradata/bak/ |
注:-l 为限制scp占用的宽带,使得scp不会把网络都占满,影响其它系统的网络使用 单位为:kbit/s 例子中大概为4.8M/s 40200*1000/8 bit 每秒
输入密码后
输入ctrl + z 暂停
1 2 | [1]+ Stopped scp -r /u01/media/Disk1/ 192.168.1.31:/u01/media/ [root@db ~]# |
此时查看jobs:
1 2 3 | [root@db ~]# jobs [1]+ Stopped scp -r /u01/media/Disk1/ 192.168.1.31:/u01/media/ [root@db ~]# |
bg将该任务号放入后台:
1 2 | [root@db media]# bg %1 [1]+ scp -r Disk1/ 192.168.1.31:/u01/media/ & |
查看任务已经在后台运行:
1 2 3 | [root@db media]# jobs [1]+ Running scp -r Disk1/ 192.168.1.31:/u01/media/ & |
使用disown -h 将这个作业忽略HUP信号:
1 2 3 | [root@db media]# disown -h %1 [root@db media]# jobs [1]+ Running scp -r Disk1/ 192.168.1.31:/u01/media/ & |
退出登录,再次进去查看任务运行状态和父进程号:
1 2 3 4 | [root@db media]# ps -ef|grep scp root 12704 12638 0 05:19 pts/0 00:00:01 scp -r Disk1 192.168.1.31 /u01/media/ root 12705 12704 8 05:19 pts/0 00:00:17 /usr/bin/ssh -x -oForwardAgent no -oPermitLocalCommand no -oClearAllForwardings yes 192.168.1.31 scp -r -t /u01/media/ root 12823 12638 0 05:22 pts/0 00:00:00 grep scp |
发现scp任务继续运行,没有因为会话断开而中断,父进程号变为1。
如果有其他任务需要使用nohup后台运行,但执行时却忘记了使用nohup,也可以参照此方法进行设置。
但是,并不是所有的命令都可以使用该方法,我测试的时候bbcp就不能放后台运行,报错:
1 2 3 | [root@ODS ~]# bg %1 [1]+ bbcp -F /backup/ids50/* root@192.168.243.243:/tmp/ & [root@ODS ~]# bbcp: Invalid data length from [::ffff:192.168.60.66] |
3、使用screen命令
screen 是一个常常用来管理多个会话的工具,它自身的特性让它经常被用来后台运行任务。如果我们有多个后台任务的需求时,使用 screen 来开启多个会话会是一个很方便的方法。
安装:
1 | yum install -y screen |
screen 的详细使用可以参考:https://www.xmmup.com/linuxzhiscreenminglinghoutaiyunxing.html,
我这里只列出几个常用的命令。
- screen -S xxx(新建一个名叫xxx的会话,不添加xxx则无名)
- screen -r xxx(回到名叫xxx的会话,如果不添加xxx则是回到最近一次会话。xxx也可以是screen -ls中列出的会话id)
- screen -ls (列出所有的会话)
- ctrl + a ; d(在会话中先执行ctrl+a,再按下d。作用是暂时离开会话,意味着将会话丢到了后台执行)
- ctrl + a ; c(在会话中先执行ctrl+a,再按下c。作用是在该会话中再新建一个窗口,可以在新窗口中执行一个新任务)
- ctrl + a ; n(在会话中先执行ctrl+a,再按下n。作用是在该会话中跳转到下一个窗口)
那么对应到后台执行 scp 即可按照如下步骤操作:
- 新建一个会话
1 | screen -S |
- 执行scp命令
1 | scp xxx.txt user@ip:~/ |
- 暂时退出screen的会话,将任务后台运行
1 | 在screen的会话中,执行ctrl + a,然后再按d键退出会话 |
4、使用tmux命令
1 2 3 4 5 | tmux new -s test -d tmux ls tmux a -t test scp xxx.txt user@ip:~/ ctrl-b + d 后台运行 |
参考:https://www.xmmup.com/linux-tmuxminglinghoutaiyunxing.html