Ich werde hier total verrückt. Ich entwickle eine Website mit dem Python Flask framework und seit heute Nachmittag benimmt sich meine Linux-Box wie ein Verrückter. Lassen Sie mich erklären.Beendete Programm (Flask) sendet weiterhin Ausgabe an STDOUT?
Ich habe meine Flask-Website auf einem Ubuntu 14.04-Server. Ich verwende es normalerweise mit ./run.py
Datei mit einem virtualenv. Heute habe ich einige Pakete installiert und schlussendlich beschlossen, dass ich wieder ein sauberes env möchte. So löschte ich meine venv
Ordner und erstellt erneut, wie ein eine Million Mal tat vor:
$ virtualenv venv
$ . venv/bin/activate
(venv) $ pip install -r requirements.txt
# EVERYTHING INSTALLS WITHOUT ERRORS
(venv) $ ./run.py
/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
* Running on http://0.0.0.0:5000/
* Restarting with inotify reloader
* Debugger is active!
* Debugger pin code: 219-856-383
/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:100: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Das ist alles ziemlich viel wie erwartet. Ich gehe dann zu meinem Browser und lade meine Website (wie ich es schon millionenfach gemacht habe). Der Browser lädt sehr lange, aber nichts wird geladen. In der Browserkonsole sehe ich überhaupt keine Verbindung.
Ich dann überprüfen Sie das Terminal und sehen nichts passiert. Also höre ich auf den Dev-Server ein STRG + C und erhalten die folgende Ausgabe mit (wie erwartet):
^CException in thread Thread-6:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/watchdog/observers/inotify_buffer.py", line 59, in run
inotify_events = self._inotify.read_events()
File "/home/kramer65/mysite/venv/local/lib/python2.7/site-packages/watchdog/observers/inotify_c.py", line 296, in read_events
event_buffer = os.read(self._inotify_fd, event_buffer_size)
KeyboardInterrupt
So überprüfen ich keine Netzwerkverbindungen, die offen sind:
$ netstat -tulpn
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 6127/python
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 0.0.0.0:24675 0.0.0.0:* -
udp6 0 0 :::22996 :::* -
So entscheide ich mich zu Töten Sie den Python-Prozess auf Port 5000 mit kill 6127
. Was dann passiert, betäubt mich einfach. Der Befehl wird „akzeptiert“ (ich keinen Fehler bekommen), aber dann sehe ich der Browser plötzlich die Webseite lädt und das Terminal beginnt die Ausgabe-Protokolle:
(venv) $ kill 6127
(venv) $ 83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.045281
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.062855
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.080915
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.099523
83.161.103.21 - - [2016-04-13 13:59:44] "GET/HTTP/1.1" 200 7334 0.118382
83.161.103.21 - - [2016-04-13 13:59:45] "GET /bower/bootstrap/dist/css/bootstrap.min.css?version=3.3.5 HTTP/1.1" 304 745 0.006047
83.161.103.21 - - [2016-04-13 13:59:45] "GET /bower/font-awesome/css/font-awesome.min.css?version=1448904482.0 HTTP/1.1" 304 745 0.003684
etc. etc.
Und daraus ich verstehe nicht alles. Ich bekomme die Ausgabe, obwohl ich dachte, ich hätte den Dev-Server mit STRG + C gestoppt und zwei Befehle dazwischen ausgeführt (netstat -tulpn
und kill 6127
).
Ich kann dann traf ein paar Mal eingeben, die mir wieder meine Startlinie bekommt, und dann beliebige Befehle ausführen:
(venv) $
(venv) $
(venv) $ pwd
/home/kramer65/mysite
(venv) $
und wenn ich die Website im Browser neu geladen ich einfach die Ausgabe wieder in das gleiche Terminalfenster. Meine Befehle, alle Ausgaben meiner Befehle und die Flask-dev-Server-Protokolle werden nur im selben Terminal-Fenster ausgegeben.
Ich habe versucht, den Server neu zu starten, entfernen Sie alle Website-Code und entfernen und installieren Sie die virtualenv wieder, und ich habe sogar einen neuen Benutzer erstellt und alles darin installiert, aber ich bekomme das gleiche Ergebnis immer und immer wieder.
Die Sache ist, dass ich nicht weiß, WARUM ich dieses Ergebnis bekomme. Ist es wegen Flask, wegen der Virtualenv, wegen eines seltsamen Bugs mit dem Netzwerk, wegen Bash oder gar etwas anderem ?!
Und am wichtigsten, ich habe keine Ahnung, wie ich das lösen kann. Hat jemand eine Idee? Alle Tipps sind willkommen, weil ich hier meine Haare bin herausziehen ..
[EDIT]
ich $ ps -eaf | grep python
lief, mit den folgenden Ergebnissen:
$ ps -eaf | grep python
immotest 1489 1444 0 14:33 pts/1 00:00:00 venv/bin/python ./run.py
immotest 1497 1489 1 14:33 pts/1 00:00:00 /home/kramer65/mysite/venv/bin/python ./run.py
immohie+ 1510 1374 0 14:34 pts/0 00:00:00 grep --color=auto python
Wenn Sie eine ps -eaf | ausführen grep python zeigt es alles andere als die Ausgabe von netstat? – lapinkoira
@lapinkoira - Nichts wirklich interessantes. Ich habe das Ergebnis am Ende der Frage hinzugefügt. Irgendeine Idee? – kramer65
Ich müsste den run.py Code überprüfen – lapinkoira