繁体   English   中英

从调用python脚本的bash脚本返回

[英]Returning from bash script that invokes a python script

我有一个bash脚本( Controller.sh ),它可以调用python脚本( MyDaemon.py )。 后者带有一个参数和一个命令,可以像下面这样从命令行调用:

/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 ,然后退出并显示一个状态。 应该启动python脚本,并且Controller.sh应该返回。 这是我的Controller.sh代码:

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 blue start调用Controller.sh blue start它将启动python脚本,但是Controller.sh不会返回状态。 另一方面,如果我运行以下命令,它将返回:

[nford@myserver]# 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
[nford@myserver]#

我不得不得出一个结论,那就是bash脚本中存在某些阻止其返回的信息。

应该注意的是, MyDaemon.py会分叉进程,这就是为什么我需要重定向输出。 还应该注意的是,我将大部分内容从另一个与php脚本执行类似操作的脚本中删除。 一些我不太理解的含义(例如STATUS=$? )。 也就是说,即使我在sudo taskset调用行之后删除了所有内容,它仍然无法干净地返回。 如何获取bash脚本以正确执行此命令?

脚本后:我对这个问题“太过具体”并被否决/否决感到困惑。 试图使自己清晰 我试图了解在分支上下文脚本与bash脚本上下文中运行方式的差异。 我在上面提供了一个具体示例,但这是一个一般概念。

更新:当我使用bash -x运行脚本时,此结果进一步表明它死于sudo taskset行。 它没有start命令的事实令人困惑。

[nford@myserver]# 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

更新: bash -x揭示了问题: start命令未通过:变量名称中的错字产生为无声bash错误。 要点:使用bash -x进行调试!

由于您的错字-您应该在脚本的顶部使用set -u ,这可以节省生命,并且可以避免不眠之夜以及对头发的拉扯。

set -u会给你...

myscript.sh: line 11: COMMMAND: unbound variable

记住,您可以像使用-x一样运行类似bash -u myscript.sh arg1 arg2类的脚本,它们都有助于跟踪脚本问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM