2013-02-14 6 views
2

파이썬 스크립트 (MyDaemon.py)를 호출하는 bash 스크립트 (Controller.sh)가 있습니다. 후자는 인수 및 명령을 받아,과 같이 명령 줄에서 호출 할 수 있습니다 :파이썬 스크립트를 호출하는 bash 스크립트에서 돌아 가기

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue start 

또는

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue stop 

또는

/usr/bin/python /opt/stuff/MyDaemon.py -p Blue status 

난에 Controller.sh을 얻기 위해 시도하고있다 MyDaemon.py을 호출 한 후 상태로 종료하십시오. 파이썬 스크립트가 시작되고 Controller.sh이 반환되어야합니다. 내가 Controller.sh blue start를 호출 명령 줄에있는 경우

COLOR=$1 
COMMAND=$2 

DIRNAME=`dirname $0` 
RESULT="/tmp/$COLOR.$COMMAND.result" 

# remove any old console output 
rm -f $RESULT 2>/dev/null 

#start with CPU affinity for anything other than CPU 0. 
sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p $COLOR $COMMMAND</dev/null >$RESULT 2>&1 

STATUS=$? 

# print output 
cat $RESULT 

# check on success 
if [ $STATUS -ne 0 ] 
then 
     echo "ERROR: $COLOR $COMMAND failed" 
     exit 1 
fi 

지금, 그것은 파이썬 스크립트를 개막하지만, Controller.sh는 상태를 반환하지 않습니다이 내 Controller.sh 코드입니다. 반면에, 내가 실행하는 경우는 반환하지 다음 나는 복귀를 방해하는 bash는 스크립트에 대한 뭔가가 있다는 결론을 강요하고

[[email protected]rver]# sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p blue start</dev/null >/tmp/blah.log 2>&1 
Started with pid 1326 
[[email protected]]# 

.

MyDaemon.py은 출력을 리디렉션해야하는 이유 때문에 fork 프로세스를 수행한다는 점에 유의해야합니다. 또한 나는 PHP 스크립트와 비슷한 것을하는 또 다른 스크립트에서이 대다수를 들었다. (예 : STATUS=$?과 같이) 퍼지 나는 의미 중 일부. 즉, sudo taskset 호출 줄 뒤에 모든 내용을 잘라내더라도 여전히 깨끗하게 반환하지 못합니다. 이 명령을 제대로 실행하기 위해 bash 스크립트를 얻으려면 어떻게해야합니까?

포스트 스크립트 : 나는이 질문이 '너무 구체적'인 방법에 대해 다소 당혹스럽고 다운 투표/투표 종료에 투표했습니다. 수정 같이 맑게하기 위해; 나는 포크 프로세스 스크립트가 명령 행의 맥락에서 bash 스크립트 대 실행되는 방식의 차이를 이해하려고 노력하고있다. 위의 특정 예제를 제공했지만 일반적 개념입니다.

업데이트 : 더는 sudo taskset 줄에 죽는 것을 보여주는, bash -x을 사용하여 스크립트를 실행할 때이 결과 . start 명령에서 벗어난 사실은 혼란 스럽습니다.

[[email protected]]# bash -x Controller.sh Blue start 
+ COLOR=Blue 
+ COMMAND=start 
++ dirname Controller.sh 
+ DIRNAME=. 
+ RESULT=/tmp/Blue.start.result 
+ rm -f /tmp/Blue.start.result 
+ sudo taskset -c 1-8 /usr/bin/python /opt/stuff/MyDaemon.py -p Blue 

UPDATE : bash -x 문제를 보여 다음 start 명령이 통과되지 않는 : 변수 이름에 오타로 침묵 bash는 오류가 발생합니다. 테이크 어웨이 : 디버그 용으로 bash -x을 사용하십시오!

+0

나는 그렇게 생각하지 않는다.'cat'은'$ RESULT'를'$ STATUS'로 읽습니다. 그런 다음'$ STATUS'가 비어 있는지 확인합니다.관계없이 문제는 그 시점 이전에 발생합니다. 여기에 내가 포함하려는 것을 보여주기 위해 포함시켰다. –

+0

나는 모든 스크립트가 아직 실행 중이 아니면 반환 상태가 있다고 믿습니다. 반환 상태를 얻을 수 없습니까? – AlexLordThorsen

+0

기본 스크립트가 제어권을 다시 전달해야하더라도 bash 스크립트는 계속 실행되는 것처럼 보입니다. 따라서 반환 상태가 없습니다. –

답변

1

귀하의 오타로 인해 스크립트 상단에 set -u을 사용해야합니다. 이는 생명의 은인이며 밤에는 잠을 자지 못하고 머리카락을 당기는 것을 막습니다.

set -u

myscript.sh: line 11: COMMMAND: unbound variable 

는 모두가 스크립트 문제를 추적하는 데 도움이, 당신은 마찬가지로 -x 너무 bash -u myscript.sh arg1 arg2 같은 스크립트를 실행할 수 있습니다 기억 ... 너희에게 준 것이다.

관련 문제