파이썬 스크립트 (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
을 사용하십시오!
나는 그렇게 생각하지 않는다.'cat'은'$ RESULT'를'$ STATUS'로 읽습니다. 그런 다음'$ STATUS'가 비어 있는지 확인합니다.관계없이 문제는 그 시점 이전에 발생합니다. 여기에 내가 포함하려는 것을 보여주기 위해 포함시켰다. –
나는 모든 스크립트가 아직 실행 중이 아니면 반환 상태가 있다고 믿습니다. 반환 상태를 얻을 수 없습니까? – AlexLordThorsen
기본 스크립트가 제어권을 다시 전달해야하더라도 bash 스크립트는 계속 실행되는 것처럼 보입니다. 따라서 반환 상태가 없습니다. –