我试图使用example的一些输入来修改这个here,因为我只想停止作为守护进程运行的特定python应用程序,因为在同一台服务器上也会有其他应用程序在python上运行,所以不想杀死所有python脚本…
服务器运行amazon linux,我相信它是centos。

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 signum-sigspec]pid jobspec…或者杀死-l[sigspec]
如果我从shell运行获取pid的命令,它会工作:
ps -ef | grep '[p]ython /usr/local/sbin/app1/app.py' | awk '{ print $2 }'

我拿到了进程ID,我遗漏了什么…?
多谢提前!

最佳答案

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

grep '[p]ython $APPARGS'

在单引号中,变量不会展开。您应该使用双引号:
grep "[p]ython $APPARGS"

10-07 13:23
查看更多