繁体   English   中英

Boto:如何使用SSH进入多个EC2实例并开始长时间运行的过程

[英]Boto: how to ssh into multiple EC2 instances and start long-running process

我有一个脚本登录到现有的Amazon EC2实例,并使用sshclient_from_instance启动python进程, sshclient_from_instance所示:

ssh_client = sshclient_from_instance(instance,
                                 ssh_key_file='path/to/my/pem',
                                 user_name='ubuntu')
status, stdout, stderr = ssh_client.run('python myscript.py')

我的问题是最后一行一直等到它从EC2实例接收到状态,stdout,stderr对象。 我在EC2实例上运行的myscript.py需要花费几个小时,我想在一个循环中的不同实例上启动其中的20个实例。

现在,我一直在手动杀死boto内核,然后为下一个实例重新启动它,但是我不禁想知道是否没有办法摆脱最后一行并遍历我的boto脚本20次。

忘了boto怎么样:

假设您有一个包含所有主机(主机名或IP地址)的文件

$ cat hosts
host1
host2
host3
...

运行以下命令以完成工作。

while line host 
do
  nohup ssh -i path/to/my/pem ubuntu@$host python myscript.py &
done < hosts

如果您知道ansible,也许您需要考虑使用它来以更简单的方式管理这些实例。

如果您关心脚本的输出,则必须在单独的线程中启动每个脚本。

如果您不关心脚本的输出,则可以使用nohup并在后台启动脚本。 我还没有测试过,但这应该可以使您大致了解:

status, stdout, stderr = ssh_client.run('sh -c "nohup python myscript.py &>/dev/null &"')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM