如何为多个远程脚本执行维护单个ssh连接?

2024-10-01 11:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在系统a中有一个包含数百万个文件的文件夹,而系统B在同一个网络中。你知道吗

计算机A--->;/home/nsadmin/Folder--192.168.150.90

计算机B--->;/home/nsadmin/自动化.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行-->;从计算机中删除文件夹

这似乎是非常糟糕的编程。你知道吗

因此,我的想法是维护一个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

我面临的逻辑问题:

  1. 复制所有文件需要大量时间
  2. 对于所有要复制的文件,没有剩余时间的估计
  3. 多个ssh连接
  4. 系统B中的空间问题
  5. 系统B更像是一个工人,它有一些逻辑,占用的空间更少。你知道吗
  6. 这种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

Tags: 文件thetonamegt文件夹homeremote
2条回答

使用ControlMaster。它将只为您将发出的所有命令/scp打开一个TCP连接。在~/.ssh/configadd中设置非常简单:

Host 192.168.150.91
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%C

然后只运行伪代码而不做任何修改,它将执行得更快(通过单个TCP连接)。你知道吗

如果需要连续运行这些自动化作业,我建议使用celery。Celery允许您创建任务队列并将它们分发给工作人员。您甚至可以像cron作业一样安排任务在特定时间运行。如果需要,您可以在不同的机器上创建worker,但是请注意,如果这样做,您的系统可能不具有分区容错性。另一个在多台机器上配置和安装软件的软件是ansible。您可以编写一个ansible playbook来在您的工作机器上配置和安装软件,这样它们就可以开始工作了。这样你就不必每次都用手来安装了。你知道吗

相关问题 更多 >