并行和在后台运行多个shell脚本

时间:2017-02-14 06:54:33

标签: bash shell scripting benchmarking ycsb

我有一些在后台运行的YCSB数据加载脚本

data_load.sh:

nohup ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load1_output.txt &

nohup ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load2_output.txt &

nohup ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load3_output.txt &

还有一些YCSB Run Scripts,如下所示:

Read_test.sh:

nohup ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read1_output.txt &

nohup ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read2_output.txt &

nohup ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read3_output.txt &

如果我单独运行它们,它们将在后台和并行运行。

但是如何自动执行此操作或编写一个脚本,该脚本将一个接一个地调用这两个脚本,并在转到下一个脚本之前等待第一个脚本完成?

先谢谢。

3 个答案:

答案 0 :(得分:1)

您可以修改第一个脚本以在最后设置let dictionary = JSON(result) // print("albums **************\(dictionary)") if let data = dictionary["data"].array { print("data of profilePicture ******* \(data)") if let dict = data.filter{ $0["name"] == "Profile Pictures" }.first as? [String: String] { let id = dict["id"] } } 您可以拥有父脚本wait第一个脚本和source

wait

通过source ./data_load.sh wait ./Read_test.sh - 子脚本,它创建的作业实际上将成为主脚本的作业,使您能够source

没有参数的wait内置将等待所有后台作业完成,之后执行将继续执行下一个命令

答案 1 :(得分:0)

您可以在并行模式下使用xargs

$ echo {1..4} | xargs -n1 -P 4 echo "potato"
potato 1
potato 4
potato 3
potato 2

这个管道命令说"采取有输入的输入,一次剥掉一个东西,分成4个线程,并用字符串'土豆'回声。"

还有GNU Parallel,有些人发誓 - 尽管学习曲线和事实表明它对于我的用例并不比xargs好(事实上它并没有#&# 39;预装在我的发行版上)让我无法学到太多东西。

答案 2 :(得分:0)

我将详细说明一个p的答案:

load_and_read.sh:

#!/bin/bash

load_commands='ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load1_output.txt
ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load2_output.txt
ycsb load couchbase2 -s -P workloada -p couchbase.bucket=poc -threads 30 .. > load3_output.txt'
echo "$load_commands" | xargs -P3

read_commands='ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read1_output.txt
ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read2_output.txt
ycsb run couchbase2 -s -P workloadc -p couchbase.bucket=poc -threads 30 .. > read3_output.txt'
echo "$read_commands" | xargs -P3

使用nohup ./load_and_read.sh &在后​​台运行整个脚本。第一个echo "$cmds" | xargs -P3并行运行三个加载命令,然后,在这三个加载命令完成后,第二个并行运行三个读取命令。