2012-04-23 2 views
0

runner1.sh..runner31.sh라는 31 개의 쉘 스크립트가 있습니다. cron 작업을 생성하고이 .sh 스크립트를 모두 실행해야합니다. runnerX가 실패하면 runnerX + 1을 실행하지 않아야합니다.셸 스크립트의 여러 순차 작업이 조건부 방식으로 기록됩니다.

나는 다음과 같은 이러한 작업의 통합을위한 쉘 스크립트를 작성했습니다,하지만 난이 올바른 해결책인지 확실하지 않다 :

ps -ef |grep -i grep | grep runner1.sh && echo "not to start" && sh runner1.sh && sh runner2.sh && sh runner3.sh && sh runner4.sh && sh runner5.sh && sh runner6.sh && sh runner7.sh && sh runner8.sh && sh runner9.sh && sh runner10.sh && sh runner11.sh && sh runner12.sh && sh runner13.sh && sh runner14.sh && sh runner15.sh && sh runner16.sh && sh runner17.sh && sh runner18.sh && sh runner19.sh && sh runner20.sh && sh runner21.sh && sh runner22.sh && sh runner23.sh && sh runner24.sh && sh runner25.sh && sh runner26.sh && sh runner27.sh && sh runner28.sh && sh runner29.sh && sh runner30.sh && sh runner31.sh 

이 방법이 정확하거나 솔루션인지 알려주세요 다른 것입니다.

답변

1

그래서 순차적으로 호출해야하는 일련의 runnerX.sh 스크립트가 있습니다.

for i in $(seq 1 31); do 
    sh runner$i.sh || break 
done 

이것은 순차적 인 순서대로 실행하고 이전 다음 실행이 실패하는 것을 포함합니다.

확실히 기본 runner1.sh가 실행되지 않도록하려면, 당신이 할 :

pid=$(ps -fe | grep '[r]unner1.sh' | awk '{print $2}') 

또는

pid=$(pgrep runner1.sh) 

또는 runner1의 PID를 검출하기위한 다양한 기법의

. SH 결합

, 당신은으로 for 루프를 둘러싸고 :

if [ -z "$pid" ]; then 
    # do for here 
    : 
fi 
관련 문제