修改 python 守护进程脚本,停止不起作用
modifying python daemon script, stop does not work
我正在尝试修改此 example using some input from here,因为我只想停止特定的 Python 应用 运行ning 作为守护进程,因为在同一进程中还会有其他应用服务器 运行正在 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 }'`
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 }'
我得到了 processid,所以我缺少什么...?
非常感谢!
您在 grep 表达式中使用了单引号:
grep '[p]ython $APPARGS'
在单引号中,变量不会被展开。你应该使用双引号:
grep "[p]ython $APPARGS"
我正在尝试修改此 example using some input from here,因为我只想停止特定的 Python 应用 运行ning 作为守护进程,因为在同一进程中还会有其他应用服务器 运行正在 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 }'`
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 }'
我得到了 processid,所以我缺少什么...?
非常感谢!
您在 grep 表达式中使用了单引号:
grep '[p]ython $APPARGS'
在单引号中,变量不会被展开。你应该使用双引号:
grep "[p]ython $APPARGS"