Boto:如何ssh到多个EC2实例并开始长时间运行的进程

时间:2015-10-06 11:14:04

标签: python amazon-web-services ssh amazon-ec2 boto

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

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次。

2 个答案:

答案 0 :(得分:0)

忘了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,也许你需要考虑使用它来更简单地管理这些实例。

答案 1 :(得分:0)

如果你关心脚本的输出,那么你必须在一个单独的线程中启动它们。

如果您不关心脚本的输出,则可以使用nohup并在后台启动脚本。我还没有对此进行测试,但这应该给你一般的想法:

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