python - 修改 python 守护进程脚本,停止不起作用

标签 python linux shell daemon

我正在尝试修改此 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: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

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

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

我得到了 processid 那么我错过了什么......?

非常感谢!

最佳答案

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

grep '[p]ython $APPARGS'

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

grep "[p]ython $APPARGS"

关于python - 修改 python 守护进程脚本,停止不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336427/

相关文章:

linux - 在 probe() 函数中访问/设置 filp->private_data 成员

linux - 在具有完整路径的 Linux 中使用 ls 命令列出文件

linux - 从 bash 中的文件内容设置变量(循环)

python - 为什么 `celery.current_app` 引用 Flask View 函数中的默认实例

python - 替换字符串中的所有非字母数字字符

python - 我在此if/else语句上的语法有什么问题?

LINUX - saltstack cmd.run 在变量中

python - 为什么我不能在 Spyder 中使用 matplotlib.pyplot?

linux - protobuf如何判断一个值是属于可选字段,还是属于另一个对象?

linux - IOHIDManager OsX : wrong match between HID descriptor and HID report?