2016-04-13 13 views
0

Burada tamamen deliriyorum. Python Flask framework'u kullanarak bir web sitesi geliştiriyorum ve bu öğleden sonra Linux box'ım çılgın bir adam gibi davranıyor. Açıklamama izin ver.Sonlandırılan program (Flask) STDOUT'a çıkış göndermeyi sürdürüyor mu?

Ben Bir Ubuntu 14.04 sunucuda benim Matara web sitesi var. Normalde bir virtualenv kullanarak ./run.py dosyasını kullanarak çalıştırın. Bugün bazı paketler yükledim ve sonunda tekrar temiz bir çevre istediğime karar verdim. beklendiği gibi

$ 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 

Bunların hepsi hemen hemen: a bir milyon kez yaptığı gibi, Yani benim venv klasörü silindi ve tekrar yarattı. Ardından tarayıcımla devam edip web sitemi yüklerim (daha önce milyon kez yaptığım gibi). Tarayıcı çok uzun bir süre yükler, ancak hiçbir şey yüklenmez. Tarayıcı konsolunda hiç bir bağlantı açıklığı göremiyorum bile.

Sonra terminali kontrol ve hiçbir şey ya oluyor bakın. Bu yüzden bir CTRL + C kullanarak dev sunucusunu durdurmak ve (beklendiği gibi) aşağıdaki çıktıyı almak:

$ 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    :::*        - 

yüzden karar:

^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 

yüzden açık herhangi bir ağ bağlantılarını kontrol kill 6127 kullanarak port 5000 üzerindeki python işlemini sonlandırın. Sonra ne olur sadece beni sersemletir. komutu (hiçbir hata alıyorum) "kabul" alır, ama sonra tarayıcı aniden web sitesine yükler ve terminal çıkışı günlükleri başlar bkz:

(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. 

Ve bundan hiç bir şey anlamıyorum. Ben CTRL + C kullanarak dev-sunucu durdu ve (netstat -tulpn ve kill 6127) arasında iki komutları bulmuştun da çıktı alabilirsiniz.

Sonra tekrar bana başlangıç ​​çizgisini aldığı, birkaç kez butonu tıklayın ve ardından istenilen komutları çalıştırabilirsiniz:

(venv) $ 
(venv) $ 
(venv) $ pwd 
/home/kramer65/mysite 
(venv) $ 

ve ben tarayıcıda web sitesini yeniden ne zaman basitçe tekrar çıktı almak aynı terminal penceresi. Komutlarım, komutlarımın herhangi bir çıktısı ve Flask dev-sunucusu günlükleri, hepsi aynı terminal penceresinde çıktılanır.

Sunucuyu yeniden başlatmayı denedim, tüm web sitesi kodlarını kaldırarak ve virtualenv'i tekrar kaldırıp tekrar yükledim ve yeni bir kullanıcı oluşturdum ve orada her şeyi yükledim, ancak aynı sonucu tekrar tekrar alıyorum.

şey

bu sonucu elde NEDEN bilmiyorum olmasıdır. Flask yüzünden, virtualenv yüzünden, ağdaki bazı tuhaf hatalar yüzünden, bash ve hatta başka bir şey yüzünden mi ?!

Ve en önemlisi, ben bu çözebilir nasıl hiçbir fikrim yok. Herhangi bir fikri olan var mı? Burada saçımı çekerek olduğum için tüm ipuçları, bekliyoruz ..

[DÜZENLE] aşağıdaki sonuçlarla birlikte ben $ ps -eaf | grep python ran

:

$ 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 
+0

Bir ps -eaf çalıştırırsanız | grep python, netstat çıktısından başka bir şey göstermiyor mu? – lapinkoira

+0

@lapinkoira - Gerçekten ilginç bir şey yok. Sonucu sorunun sonuna ekledim. Herhangi bir fikir? – kramer65

+0

run.py kodunu kontrol etmeliyim – lapinkoira

cevap

0

Tamam, fazla için karıştırmasını sonra uzun süredir sorunu buldum.Kod değişiklikleri üzerine kendini yeniden başlatabilmek için yeni bir süreç geliştiren Flask sunucu ile bir ilgisi olduğundan şüphelendim. Bu arada ben gereksinimleriimi.txt için watchdog ekledim çünkü onu laptop'umden Linux dev sunucumla senkronize etmek için kullanıyorum.

Flask dev sunucusu tarafından inotify'ın kullanımıyla bekçi köpeğinin iyi oynamadığı ortaya çıkar. Watchdog'u sunucudan kaldırdıktan sonra her şey tekrar iyi çalışıyor.

Umarım bu da gelecekte birilerine yardımcı olur. Her durumda: güzel bir gün geçirin!

+0

Inotify reloader *, * watchdog ve çok daha verimli. Bu büyük olasılıkla ya projenizle ilgili ayrı bir sorun ya da rapor edilmesi gereken bir hatadır, ancak "bekçi kitlesini kaldırma" yi savunmak kesinlikle iyi bir şey değildir. – davidism

+0

@davidism - Hmm, iyi nokta. Belki de sorun, Flask için sorun yaratan farklı bir Watchdog versiyonunu manuel olarak kurmaktan kaynaklanıyor. Sorunu en az bir Flask uygulamasına ayırmaya çalışacağım ve daha sonra Flask github sayfasında bir sorun olarak rapor edeceğim. – kramer65