首页 > 解决方案 > 使用结构同时在多个主机上运行脚本

问题描述

我正在尝试创建一个程序来创建多个液滴,向每个液滴发送一个脚本,并在不等待输出的情况下启动所有脚本的执行。我试图在后台运行它,使用 nohup 以便在使用以下代码从终端断开连接时它不会被杀死:

for i in len(script_names):
    c = Connection(host = host[i], user = user[i], connect_kwargs = {"password" : password, "key_filename" : key_filename})
    c.run("nohup python3 /root/" + script_names[i] + " &")

我已经尝试过相同想法的其他变体,包括设置“pty=False”,使用 "> /dev/null < /dev/null &" 将输出重定向到 dev/null,但似乎没有任何效果。

是否可以发出多个命令以同时在不同主机上运行脚本而无需等待结构的输出?或者我应该使用另一个包?

标签: pythonfabric

解决方案


Fabric 2.x 的组还没有完全充实,所以它们不太适合这个用例。在结构 1.x 中,我将通过使用 script_names 的字典来完成此操作,其中键是host列表中的主机字符串,值是当前 script_names 中的名称。然后我会让每个任务像往常一样并行执行它的运行命令,在任务中查找值fabric.api.env.host_string。Fabric 2.x 的执行层还不支持这个用例 afaik。这是我试图破解它,但作者正确地指出,这个功能应该在执行器中处理,我当时无法提出解决方案:https ://github.com/fabric/fabric /拉/1595


推荐阅读