这就是我的代码的样子
master_script.sh
#!/bin/bash
chmod +x *
declare -A test=(
["echo1"]="sh `pwd`/echo1.sh"
["echo2"]="sh `pwd`/echo2.sh"
["echo3"]="sh `pwd`/echo3.sh")
log="$base_path"
for var in ${!test[@]}
do
`${test[$var]} >> $var.log`
echo "$var Started! :-)"
done
echoX.sh
脚本看起来像这样
#!/bin/bash
while true;do
echo "This is from Test1"
#some Code
echo "Eching the Output"
#some other code!
sleep 60
done
这个想法很好,但正如你所知,控件正在等待${test[$var]} >> $var.log
。每个echoX.sh
都是while
循环,所以控件正在等待完成!。我想启动所有脚本
我该如何解决这个问题?注意:未来计划实现的功能包括启动单个脚本,例如
./master_script.sh start echo1
, --> 将仅启动 echo1
./master_script.sh stop echo1
---> 将仅停止 echo1
./master_script.sh start all
--> 将启动所有脚本
所以,这就是为什么我遵循上述程序。
还有一些其他的想法,比如。(哪个不想做!)
echox.sh
#!/bin/bash
echo "This is from Test1"
#some Code
echo "Eching the Output"
#some other code!
nohup_echoX.sh
#!bin/bash
while true;do
./echoX.sh >> test.log 2>&1 &
done
然后在 中mater_script.sh
,添加./nohup_echoX.sh
infor
循环。
那么,有没有什么方法可以实现这一点。更重要的是,我看到(ps aux | grep <NAME>
),同一进程的多个实例正在运行。那么,我该如何控制呢?
答案1
Gnu并行将很好地允许您从 shell 脚本并行运行多个进程,等待它们完成。
答案2
换线
`${test[$var]} >> $var.log`
到
"${test[$var]}" >> "$var.log" &