从单个 shell 脚本启动多个 shell 脚本的有效方法

从单个 shell 脚本启动多个 shell 脚本的有效方法

这就是我的代码的样子

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.shinfor循环。

那么,有没有什么方法可以实现这一点。更重要的是,我看到(ps aux | grep <NAME>),同一进程的多个实例正在运行。那么,我该如何控制呢?

答案1

Gnu并行将很好地允许您从 shell 脚本并行运行多个进程,等待它们完成。

答案2

换线

`${test[$var]} >> $var.log`

"${test[$var]}" >> "$var.log" &

答案3

我发现主管这真的很酷。轻松启动、轻松配置、轻松管理!看看这个博客了解如何使用和配置:-)

相关内容