Webserver dauerhaft betreiben

  • Hallo Forum,

    ich bin absoluter Neuling und mache meine ersten Gehversuche :D

    Ich habe mittlerweile einen Webserver erstellt, auf den ich auch zugreifen kann. Allerdings muss ich meinen Python Skript immer über den Terminal aufrufen. Nun möchte ich, dass der Webserver automatisch eingeschaltet wird, so dass nach dem Hochfahren des Pi's der Server direkt aufgerufen werden kann.

    Mein Webserver Programm sieht aktuell so aus:

    http://codepad.org/Mr0J2BSk
    ------------------------------------------------------------------------

    Ich habe schon im Forum nachgelesen und rausgefunden, dass ich ein Python Programm über rc.local direkt aufrufen kann.
    Leider hat dies nicht funktioniert.

    Meine Speicherorte für das Python Skript ist folgender:
    /home/pi/Documents/Projekte/Webserver.py


    Genau den gleichen Speicherort habe ich auch in der rc.local Datei eingefügt.

    Leider funktioniert das aber nicht. Wahrscheinlich besitzt nur der Zugriff eine falsche Syntax. Weiß aber nicht wie ich das richtig gestellt bekomme.

    Danke für die Antwort

    Einmal editiert, zuletzt von nigge94 (27. Januar 2017 um 10:26)

  • Dir fehlt denke ich der Shebang - ein Stueck Text am Anfang der Datei, welches dem System erklaert, dass es dein Skript mit Python ausfuehren soll.

    Denn in der Kommandozeile machst du bestimmt immer "python /mein/skript.py", oder?

    Du "#!/usr/bin/python2" oder etwas aehnliches in deine erste Zeile schreiben, und dein Skript ausfuehrbar machen. Es muss so laufen, dass nur die Eingabe von "/mein/skript.py" zum laufen fuehrt. Erst dann kann das in der rc.local klappen.

  • Hallo,

    Zitat

    Nun möchte ich, dass der Webserver automatisch eingeschaltet wird, so dass nach dem Hochfahren des Pi's der Server direkt aufgerufen werden kann.


    Dann solltest du dir eine passende systemd Service Unit schreiben.

    Der eingebaute Server von Flask, Bottle & Co ist auch nicht unbedingt für den Produktivbetrieb gedacht, eher für's lokale Testen. WSGI-konforme Python Webanwendungen liefert man normalerweise über eine WSGI Applikationsserver aus, wie z.B. gunicorn (ggf. mit vorgeschaltetem nginx), Apache + mod_wsgi oder einen der anderen WSGI Applikationsserver, die es so gibt. Die Doku von Flask hat dazu ein eigenes Kapitel: http://flask.pocoo.org/docs/0.12/deploying/

    Gruß, noisefloor

  • Hey, ich habe jetzt nach einem Tutorial gesucht und auf dieses gestoßen.
    https://www.forum-raspberrypi.de/Thread-tutoria…s-python-script

    Ich habe dies nochmals so nachgetippt. Leider ohne Erfolg :no_sad:

    Meine beiden Programmcodes sehen wie folgt aus:

    Autostart Datei:

    Code
    #!/usr/bin/env python
    
    
    while True:
     print "test"

    in der rc.local Datei steht folgendes:

    Den Befehl [font="monospace"]sudo chmod +x /home/pi/test.py habe ich zwischenzeitlich ausgeführt.[/font]

    Danke für die Hilfe

  • In dem Tutorial steht ebenfalls, dass wenn ich den Befehl [font="monospace"]ps -ef | grep python [/font]eingebe eine Ausgabe erscheint, dass der Skript läuft.

    Ursprünglich wollte ich dies erst mal mit einer LED testen. Weder die LED noch das Tutorial funktioniert. Weiß leider echt nicht wo der Fehler liegt :neutral:

  • Hallo,

    Zitat

    Leider ohne Erfolg


    Wie ich bereits sagt: nimm' eine systemd Service Unit (wenn du dich jetzt fragst, warum die im Tutorial noch nicht drin ist: zu der Zeit hatte Raspbian noch kein systemd an Bord).

    1.) ist heute systemd der Standard, um Dienste wie eine Webserver zu starten, 2.) bekommst du das Logging von systemd "gratis" dazu, 3.) kann du die Unit so schreiben, dass der Webserver erst startet, wenn das Netzwerk verfügbar ist, 4.) könntest du über die Unit den Server neu starten, falls dieser crasht.

    Gruß, noisefloor

  • Hey noisefloor,

    auch mit dem Service Unit funktioniert es bei mir nicht. Ich kann noch nicht mal den Webserver manuell starten.
    Habe alles so gemacht wie auf deiner Anleitung bei ubuntuusers.

    Weiß nicht wo ich den Fehler habe -.-

  • Ich finde das etwas komisch...
    Wieso funktioniert das bei vielen, oder sogar allen anderen, nur nicht bei dir?
    Du musst also irgend etwas anders machen...
    Nur was?

    Denn, wenn ich das genau so mache wie du in Beitrag#5 beschreibst - sprich, eine Datei /home/pi/test_autostart.py zu erstellen, ausführbar zu machen und diese in /etc/rc.local wie von Dir beschrieben einfüge, anschließend reboote und dann prüfe ob irgend ein Prozess "python" läuft, erhalte ich? Eine Ausgabe! Es läuft!

    Code
    root@raspberrypi:~# ps aux | grep python
    root       634 99.4  0.5   9536  5268 ?        R    20:28   2:19 python /home/pi/test_autostart.py
    root      1902  0.0  0.0   4336   564 pts/0    S+   20:30   0:00 grep python
    root@raspberrypi:~# uptime
     20:30:51 up 2 min,  2 users,  load average: 1.54, 0.86, 0.35
    root@raspberrypi:~#


    Blöd ist allerdings die Art und Weise des Python Scripts - es verursacht nämlich nahezu 100% CPU Auslastung...
    Also warum funktioniert das bei Dir nicht?
    Eventuell hast du an den Rechten von /etc/rc.local herumgespielt oder die Datei sogar überschrieben?
    Eventuell läuft auf dem Port deines Flask auch bereits ein anderer Dienst, wie zum Beispiel apache2? Es kann immer nur ein Dienst auf dem selben Port lauschen. Schon mal probiert deinen Flask-Port auf zum Beispiel 808 zu ändern?

  • Ja, ich glaube das mache ich auch nochmal. Wenn das Programm bei jedem außer mir funktioniert habe ich bestimmt was zerschossen. :D

    Falls es dann wieder nicht klappt, melde ich mich nochmal.

    Aber vielen Dank soweit für die Unterstützung. :D

  • Hey,

    nachdem ich den Pi neu aufgesetzt habe und lediglich Apache installiert habe funktioniert endlich alles. :D
    Das Problem lag wahrscheinlich daran, dass ich 2 Webserver installiert hatte.

    Der Apache Webserver startet ja automatisch beim Bootvorgang, somit kann das Thema als erledigt markiert werden.

    Danke für die Hilfe :D

  • Ja, ne.... Du willst doch einen Webserver über Python nutzen oder nicht? Wieso installierst du dann apache2? :-/

    So lautet zumindest die Überschrift!

    Wenn die Überschrift mit dem von Dir gewählten Forumsbereich auch der Realität entspricht, dann deinstalliere apache2 wieder!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!