CherryPy Server beendet sich selbst

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Seit geraumer Zeit beendet sich mein CherryPy Server nach ein paar Minuten mit der Meldung:
ChannelFailures: IOError("Port 443 not bound on '10.0.2.114'",)

Nutze CherryPy 3.7. Liegt das eher an meinem Netzwerk bzw an meinem RPi oder an CherryPy? Auf dem RPi läuft sonst nichts, was den Prot 443 beansprucht.

Code: Alles auswählen

python app.py
[11/Jun/2015:10:21:48] ENGINE Listening for SIGHUP.
[11/Jun/2015:10:21:48] ENGINE Listening for SIGTERM.
[11/Jun/2015:10:21:48] ENGINE Listening for SIGUSR1.
[11/Jun/2015:10:21:48] ENGINE Bus STARTING
[11/Jun/2015:10:21:48] ENGINE Started monitor thread 'Autoreloader'.
[11/Jun/2015:10:21:48] ENGINE Started monitor thread '_TimeoutMonitor'.
....
IP: 10.0.2.112 - - [2015-06-11 10:23:19] "GET /static/js/pipan.js HTTP/1.1" 200 4219
....
[11/Jun/2015:10:23:28] ENGINE Error in 'start' listener <bound method ServerAdapter.start of <cherrypy.process.servers.ServerAdapter object at 0x2c525f0>>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/wspbus.py", line 205, in publish
    output.append(listener(*args, **kwargs))
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/servers.py", line 177, in start
    self.wait()
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/servers.py", line 233, in wait
    wait_for_occupied_port(host, port)
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/servers.py", line 459, in wait_for_occupied_port
    raise IOError("Port %r not bound on %r" % (port, host))
IOError: Port 443 not bound on '10.0.2.114'

[11/Jun/2015:10:23:28] ENGINE Shutting down due to error in start listener:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/wspbus.py", line 243, in start
    self.publish('start')
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/process/wspbus.py", line 223, in publish
    raise exc
ChannelFailures: IOError("Port 443 not bound on '10.0.2.114'",)
[/size]
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@lackschuh: startest Du Deinen Server mit den entsprechenden Rechten. Port 443 ist ein geschützter Port.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Ich melde mich als root User an. Aber auch mit sudo bricht es ab. Hab dann auf CherryPy 3.6 downgegradet und die ``wsgiserver2.py`` manuell zwecks SSL geändert. Das Ergebnis ist dasselbe.

Nun frag ich mich eben, ob es irgendwie an unserem Netzwerk liegen kann. Denn bis vor ein paar Tagen hatte ich nie Probleme.
Ein anderes Problem (hat nichts mit Python zu tun) ist, dass der RPi, wenn ich keine statische IP vergebe, sich immer die IP von unserer VoIP Anlage holt (10.0.2.104) warum auch immer (?).
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Hab gerade gesehen, dass ich eine andere Funktion am Laufen hatte als noch vor einiger Zeit. Mit der alten Klasse läuft alles:

Code: Alles auswählen

class SSLCherryPyServer(ServerAdapter):
    def run(self, handler):
        server = CherryPyWSGIServer((self.host, self.port), handler,  server_name='CherryPy')
        server.ssl_adapter = pyOpenSSLAdapter('cert.pem', 'privkey.pem')
        try:
            server.start()
        except KeyboardInterrupt:
            server.stop()
run(app, host='10.0.2.114', port=443, server=SSLCherryPyServer)


Ich wollte eigentlich die cherrypy.engine nutzen und versuchte, den ``pyOpenSSLAdapter``dranzuhängen. Darum entstand auch unten stehender Bastel, welcher, wie oben beschrieben, nach ein paar Minuten abbricht. Hier ein min. Beispiel, welches nach knapp 2min abbricht:

Code: Alles auswählen

from bottle_sslify import SSLify
from bottle import Bottle
import cherrypy
from cherrypy.process.servers import ServerAdapter
from cherrypy.wsgiserver import CherryPyWSGIServer
from cherrypy.wsgiserver.ssl_pyopenssl import pyOpenSSLAdapter


app = Bottle()
SSLify(app)


@app.route('/')
def hallo_world():
    return 'Hallo World!'


def run(app, host='10.0.2.114', port=443):
    cherrypy.server.unsubscribe()
    bind_addr = (host, port)
    ssl_server = CherryPyWSGIServer(bind_addr, app)
    ssl_server.ssl_adapter = pyOpenSSLAdapter('cert.pem', 'privkey.pem')
    cherrypy.server = ServerAdapter(cherrypy.engine,
                              ssl_server,
                              bind_addr).subscribe()
    cherrypy.engine.start()
    cherrypy.engine.block()

run(app)
Antworten