これが私のコードの外観です
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
次にinループをmater_script.sh
追加します。./nohup_echoX.sh
for
それでこれを達成する方法はありますか?さらに重要なことは、(ps aux | grep <NAME>
)同じプロセスの複数のインスタンスが実行されていることです。それでは、これをどのように制御できますか?
答え1
Gnu パラレルシェルスクリプトで複数のプロセスを並列に実行し、完了するまで待つことができます。
答え2
改行
`${test[$var]} >> $var.log`
到着
"${test[$var]}" >> "$var.log" &