本文介绍了修改python守护程序脚本,停止不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下输入来修改 ,因为我只想停止将特定的Python应用程序作为守护程序运行,因为还会有其他应用程序以及在运行Python的同一服务器上,所以不想杀死所有python脚本...

I'm trying to modify this example using some input from here as I want only to stop the specific Python app running as a daemon because there will be others as well on the same server running on Python so don't want kill all python scripts...

该服务器运行的是Amazon Linux,我相信它是CentOS。

The server runs the Amazon Linux which I believe is 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
}

启动正常,没有任何问题。当我尝试停止时,出现错误:

Start works fine, no issue. When I try and stop I get an error:

如果我从shell运行命令来获取pid,它将起作用:

If I run from the shell the command to get the pid, it works:

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

我得到了processid,所以我想念的是什么...?

I get the processid so what am I missing...?

非常感谢!

推荐答案

您使用的是grep表达式中的引号:

You're using single-quotes in your grep expression:

grep '[p]ython $APPARGS'

单引号不会扩展变量。您应该使用双引号:

In single quotes, a variable won't be expanded. You should use double quotes:

grep "[p]ython $APPARGS"

这篇关于修改python守护程序脚本,停止不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-07 07:29