【发布时间】:2017-08-20 13:35:26
【问题描述】:
我在系统 A 中有一个文件夹,其中包含数百万个文件,我在同一网络中有系统 B。
计算机 A ---> /home/nsadmin/文件夹 -- 192.168.150.90
计算机 B ---> /home/nsadmin/automate.sh -- 192.168.150.91
假设在我的文件夹目录中,所有数百万个文件都被转储了。我现在正在做的是
1 echo "Sending the files to Computer B"
2 scp -r /home/nsadmin/$folder_name nsadmin@192.168.150.91:/home/nsadmin/$folder_name
3 ssh nsadmin@192.168.150.91 "sh /home/nsadmin/$folder_name/automation.sh $folder_name"
4 rm -rf $folder_name/
根据上面的脚本,我正在做的是
- 第 1 行 --> Echo 语句
- 第 2 行 --> 将文件夹的全部内容复制到计算机 B
- 第 3 行 --> 远程执行以文件夹名称为参数运行的脚本
- 第 4 行 --> 从计算机 A 中删除文件夹
这似乎是非常糟糕的编程。
所以我的想法是保持 1 个单一的 ssh 连接并将每个文件传递给连接仍在连接的机器 B..
我会解释清楚的
ssh to remote machine open
--- subtask which should run in a loop till all the files in folder are done
--- subtask is copying each file to remote machine and running the automate.sh script with argument as file_name not folder_name,(logic i will modify)
--- After all the files are copyed done the loop
ssh to remote machine closed
我的逻辑遇到的问题:
- 复制所有文件花费大量时间
- 没有估计复制所有文件的剩余时间
- 多个 ssh 连接
- 系统 B 中的空间问题
- 系统 B 更像是一个具有一定逻辑且占用空间较小的工作器。
- 这种 ssh 连接很难实现自动化
关于如何解决我解释的这个问题的任何建议。?如果有不明白的问题欢迎评论。
我的小伪代码需求:
for i in $(find /home/nsadmin/Folder -type f);do
scp -r /home/nsadmin/$i nsadmin@192.168.150.91:/home/nsadmin/$i
ssh nsadmin@192.168.150.91 "sh /home/nsadmin/automation.sh $i"
done
【问题讨论】:
-
据我所知,脚本只使用了 2 个 ssh 连接,这还不错。
-
否 实际上我想让它端到端,就像一次获取每个文件并发送到其他机器做一些工作,然后将结果放入 DB.Overall 想法是将相同的文件发送到 5其他系统也可以进行并行操作。如果我将文件复制到机器
B,那么我需要再次复制到CDE -
复制大量数据我建议使用
rsync。此外,不是让五台计算机远程访问。为什么不使用一台服务器并在每台计算机上提取数据? -
我有一台服务器,但我想将相同的文件并行发送到 5 台机器中的每一台,并且在 1 名工作人员完成工作后,发送第二个文件,它不应等待其他机器完成其工作.
-
Ping 过去可能帮助过您的随机用户在这里是不可接受的。