gpt4 book ai didi

python - 修改 python 守护进程脚本,停止不会返回 OK(但会杀死进程)

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:34 25 4
gpt4 key购买 nike

继上一个post之后,脚本现在正确启动和停止 python 脚本(并且仅特定脚本),但不会将 OK 报告回屏幕...

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
}

开始:

Starting indigolinkserver: [ OK ]

停止:

Stopping indigolinkserver:

在 app.py 中我添加了:

[...]
def set_exit_handler(func):
signal.signal(signal.SIGTERM, func)
[...]

if __name__ == '__main__':

def on_exit(sig, func=None):
#print "exit handler triggered"
sys.exit(1)

set_exit_handler(on_exit)

在命令行中,我得到打印(未注释时),但在守护程序脚本中我什么也没得到......有些东西不会返回到 RETVAL......它可以修复吗?

有一个post (感谢@robert)关于只能将killproc与守护进程一起使用才能实现此行为?

谢谢!

最佳答案

无法让它与退出处理程序一起工作,所以我最终使用 .pid 文件来完成它......

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 }'`
killproc -p /var/run/$APPNAME.pid
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
return $RETVAL
}

在Python代码中:

if __name__ == '__main__':
pid = str(os.getpid())
pidfile = "/var/run/myPythonApp1.pid"

if os.path.isfile(pidfile):
print "%s already exists" % pidfile
#sys.exit()
else:
file(pidfile, 'w').write(pid)

关于python - 修改 python 守护进程脚本,停止不会返回 OK(但会杀死进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30337798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com