【问题标题】:Running scripts on multiple hosts concurrently with fabric使用结构同时在多个主机上运行脚本
【发布时间】:2020-12-07 23:44:01
【问题描述】:

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

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

【问题讨论】:

  • 据我所知,只有在多台服务器上执行相同的命令时,并行执行才有效,在这种情况下,我试图在每台服务器上执行不同的命令。

标签: python fabric


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2016-08-03
    • 1970-01-01
    • 2022-10-14
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多