从上一个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
}
开始:
启动indigolinkserver:[确定]
停止:
停止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与守护进程一起使用才能产生这种行为?
谢谢!
答案 0 :(得分:0)
无法让它与退出处理程序一起工作,所以我最终用.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)