我正在使用 gnu parallel 为 pantheon.io 上大约 1500 个网站生成备份,使用它们的终端命令行界面。该terminus backup:create
命令只有在收到远程端已完成的响应后才会完成。我想知道是否有任何方法可以通过并行更好地加快速度,以便更多站点可以在等待以前的站点完成的同时进行备份,或者如果没有,则可以更全面地运行。如果有什么区别的话,那就是它是从 Jenkins CI 作业运行的。谢谢。
#!/bin/bash +x
backup_sites() {
BACKUP=$(terminus backup:create "$*".live)
echo "$*": "$BACKUP"
}
SITE_LIST=$(terminus site:list --field=name)
export -f backup_sites
echo "$SITE_LIST" | parallel backup_sites
答案1
不指定并行运行的作业数量将使其默认为 cpu 数量。
从手册中:
-j
每台机器上的作业槽数。并行运行最多 N 个作业。 0 表示尽可能多。默认值为 100%,这将在每台计算机上的每个 CPU 上运行一个作业。
一般来说,这是一个安全的选择,但您正在等待网络,而不是计算。所以你可以轻松地增加数量。我会尝试 -j 200。它应该工作得很好。您可以调整此参数以获得所需的速度。
所以echo "$SITE_LIST" | parallel -j 200 backup_sites
而不是echo "$SITE_LIST" | parallel backup_sites