
이것이 내 코드의 모습입니다
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" &