从一个脚本同时执行几个bash脚本?

时间:2014-04-08 00:36:31

标签: linux bash wget

我想创建一个bash脚本,它将同时执行大约30个左右的其他脚本,这30个脚本都有wget个命令迭代一些列表。

我想过用屏幕做一些事情(发送ctrl + shift + a + d)或将脚本发送到后台,但我真的不知道该怎么做。

总结:1个主脚本执行将触发所有其他30个脚本同时执行所有脚本。

PS:我已经看过其他问题,但我不太明白这项工作是什么,或者比我需要的更多(期望返回值等)

编辑: 脚本的小片段(这部分是用我指定的配置参数执行的那部分)

if [ $WP_RANGE_STOP -gt 0 ]; then
    #WP RANGE
    for (( count= "$WP_RANGE_START"; count< "$WP_RANGE_STOP"+1; count=count+1 ));
    do
        if cat downloaded.txt | grep "$count" >/dev/null
        then
            echo "File already downloaded!"
        else
            echo $count >> downloaded.txt
            wget --keep-session-cookies --load-cookies=cookies.txt --referer=server.com http://server.com/wallpaper/$count
            cat $count | egrep -o "http://wallpapers.*(png|jpg|gif)" | wget --keep-session-cookies --load-cookies=cookies.txt --referer=http://server.com/wallpaper/$number -i -
            rm $count
        fi

1 个答案:

答案 0 :(得分:2)

最简单的方法可能是使用xargs -PGNU parallel。为主脚本中的每个子节点生成不同的参数。为简单起见,我们假设你只想一次下载一堆不同的内容。

之一
xargs -P 30 wget < urls_file
parallel -j 30 wget '{}' < urls_file

将产生多达30个同时具有来自给定输入的不同args的wget进程。如果您提供有关要运行的脚本的更多信息,我可能会提供更具体的示例。

xargs相比,Parallel有一些更复杂的调优选项,例如能够跨核心或cpu自动拆分作业。

如果您只是尝试并行运行一堆异构的不同bash脚本,请在其自己的文件中定义每个单独的脚本,然后使每个文件可执行并将其传递给并行:

$ cat list_of_scripts
/path/to/script1 arg1 arg2
/path/to/script2 -o=5 --beer arg3
…
/path/to/scriptN

然后

parallel -j 30 < list_of_scripts