我有一个脚本登录到现有的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次。
答案 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 &"')