[英]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.