Modifikation von Python-Daemon-Skript, Stop nicht wieder OK (aber tötet den Prozess)

Im Anschluss an die vorherige Post , das Skript jetzt starten und stoppt das Python-Skript (und nur das bestimmte Skript) korrekt, aber nicht berichten die OK zurück auf den Bildschirm …

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 } 

Beginnend:

Start indigolinkserver: [OK]

Stoppen:

Stoppen indigolinkserver:

Innerhalb der app.py habe ich hinzugefügt:

 [...] 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) 

Bei Kommandozeile bekomme ich den Druck (wenn nicht kommentiert) aber im Daemon-Skript bekomme ich nichts … etwas geht nicht zurück zu RETVAL … ist es fixierbar?

Es gibt einen Beitrag (Dank @robert) über die Möglichkeit, nur killproc mit Dämonen verwenden, um dieses Verhalten zu haben?

Vielen Dank!

One Solution collect form web for “Modifikation von Python-Daemon-Skript, Stop nicht wieder OK (aber tötet den Prozess)”

Hätte es nicht mit den Exit-Handlern arbeiten können, also habe ich es am Ende mit .pid-Dateien gemacht …

 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 } 

Und innerhalb des Python-Codes:

 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) 
  • Wie man Teer-Backup mit Python zu machen
  • Wie kann man das Ergebnis eines ausgeführten Shell-Befehls in einer Variable in Python speichern?
  • Python - Öffnen Sie den neuen Shell- und Run-Befehl
  • Python: Anzeige verstrichene Zeit auf Shell
  • Aufruf eines Python-Skripts von der Befehlszeile ohne Eingabe von "python" zuerst
  • Laufen von Windows-Shell-Befehlen mit Python
  • Einen externen Befehl in Python aufrufen
  • Wie man korrekt Python-Skript aus PHP ausführt
  • Senden von Nachrichten mit Telegramm - APIs oder CLI?
  • Python-Paketverwaltung unter Mac OS X
  • Aufruf einer Python-Funktion aus einem Shell-Skript
  • Python ist die beste Programmiersprache der Welt.