【问题标题】:modifying python daemon script, stop does not work修改python守护程序脚本,停止不起作用
【发布时间】:2015-05-19 21:23:50
【问题描述】:

我正在尝试使用来自here 的一些输入来修改这个example,因为我只想停止作为守护进程运行的特定 Python 应用程序,因为在 Python 上运行的同一台服务器上也会有其他应用程序,所以不要'不想杀死所有 python 脚本...

服务器运行我认为是 CentOS 的 Amazon Linux。

USER="root"
APPNAME="myPythonApp1"
APPBIN="/usr/bin/python"
APPARGS="/usr/local/sbin/app1/app.py"
LOGFILE="/var/log/$APPNAME/error.log"
LOCKFILE="/var/lock/subsys/$APPNAME"

LOGPATH=$(dirname $LOGFILE)

prog=$APPBIN

start() {
        [ -x $prog ] || exit 5
        [ -d $LOGPATH ] || mkdir $LOGPATH
        [ -f $LOGFILE ] || touch $LOGFILE

        echo -n $"Starting $APPNAME: "
        daemon --user=$USER "$APPBIN $APPARGS >>$LOGFILE &"
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch $LOCKFILE
        return $RETVAL
}

stop() {
        echo -n $"Stopping $APPNAME: "
        pid=`ps -ef | grep '[p]ython $APPARGS' | awk '{ print $2 }'`
        echo $pid
        kill $pid
        sleep 1
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f $LOCKFILE
        return $RETVAL
}

开始工作正常,没问题。当我尝试停止时出现错误:

kill: 用法:kill [-s sigspec | -n 符号 | -sigspec] pid | jobspec ... 或 kill -l [sigspec]

如果我从 shell 运行命令来获取 pid,它可以工作:

ps -ef | grep '[p]ython /usr/local/sbin/app1/app.py' | awk '{ print $2 }'

我得到了 processid,所以我错过了什么......?

提前非常感谢!

【问题讨论】:

  • 大概echo $pid正在打印一个空白......

标签: python linux shell daemon


【解决方案1】:

您在 grep 表达式中使用了单引号:

grep '[p]ython $APPARGS'

在单引号中,变量不会被扩展。你应该使用双引号:

grep "[p]ython $APPARGS"

【讨论】:

  • 谢谢@robert!如果可以,请跟进问题...当我停止时,我没有像开始时那样获得确定...这是因为 python 脚本吗?
  • 嗯……会不会和$RETVAL的值有关?
  • 有志者事竟成……
  • 设法做到了......我的后续帖子中的详细信息:link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2010-11-10
  • 2011-06-09
相关资源
最近更新 更多