运行 多个主机上的脚本与 fabric 同时运行

Running scripts on multiple hosts concurrently with fabric

我正在尝试创建一个程序来创建多个 droplet,向每个 droplet 发送一个脚本,并在不等待输出的情况下启动所有脚本的执行。我尝试在后台 运行 它,使用 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但似乎没有任何效果。

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

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