Altere a linha
'${test[$var]} >> $var.log'
para
"${test[$var]}" >> "$var.log" &
Isto é o que meu código parece
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
scripts parece com isso
#!/bin/bash
while true;do
echo "This is from Test1"
#some Code
echo "Eching the Output"
#some other code!
sleep 60
done
A ideia é boa, mas como você sabe, o controle está aguardando em ${test[$var]} >> $var.log
. Cada echoX.sh
é while
loop, portanto, o controle está aguardando para ser concluído. Eu quero começar todos os scripts
Como posso resolver este problema ?. NOTA: Existem planejamentos futuros implementam recursos como, como um único script como
./master_script.sh start echo1
, - > Começará apenas echo1
./master_script.sh stop echo1
--- > Parará apenas echo1
./master_script.sh start all
- > vai começa todos os scripts
Então, é por isso que eu segui o procedimento acima.
Existem alguns outros pensamentos como ( Qual não quer fazer! )
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
Em seguida, no mater_script.sh
, adicione o loop ./nohup_echoX.sh
in for
.
Então, existe alguma maneira de implementar isso? E mais, eu vi ( ps aux | grep <NAME>
), existem várias instâncias do mesmo processo em execução. Então, como posso controlar isso?
paralelo do Gnu permitirá que você execute vários processos a partir do shell script em paralelo, aguardando sua conclusão.
Eu encontrei Supervisord que é muito legal. Início fácil, fácil configuração, fácil gerenciar !. Confira este Blog saber usar e configurar: -)
Tags shell-script