uwsgi 啓動或停止

uwsgi 啓動或停止
 

啓動:

uwsgi --ini uwsgi.ini

uwsgi.pid 是ini配置文件中配置的

 

停止:

uwsgi --stop uwsgi.pid



例子
uwsgi --stop ./script/uwsgi.pid

查看日誌
tail -50f  ./script/uwsgi.log

 

uwsgi unable to load configuration from stop

首先判斷進入虛擬環境

檢查uwsgi的指令是否正確

uwsgi signal_pidfile()/kill(): No such process [core/uwsgi.c line 1695]

uwsgi signal_pidfile()/kill(): No such process [core/uwsgi.c line 1693]

通過 ps -ef |grep uwsgi 檢查uwsgi檢查進程
將之前的ini全部kill,既然重啓不管用就全關掉
kill全部uwsgi ini進程 killall -s INT uwsgi
查看uwsgi有關的進程 ps -ef |grep uwsgi
啓動uwsgi: uwsgi --ini uwsgi.ini

 

    • 查看uwsgi進程
      在這裏插入圖片描述
      這裏是20843
    • 找到 uwsgi.pid 文件打開發現不是20843
    • 更改 uwsgi.pid 文件中的那個id(數)爲20843
    • 重新執行下重啓服務的命令

 

Invalid HTTP_HOST header: '202.200.111.111'. You may need to add '202.200.111.111' to ALLOWED_HOSTS.
setting.py文件

將ALLOWED_HOSTS = []改爲ALLOWED_HOSTS = ['*']

https -- > http

 

80端口需要root用戶才能佔用。

 

使用pip安裝uwsgi

pip install uwsgi
pip install uwsgitop

    pip安裝uwsgi後,Linux命令行敲擊uwsgi --help後,提示uwsgi命令找不到?
    答:進入python安裝環境的bin,然後使用ln -s進行軟鏈接到/usr/bin/下;

web目錄規範化(項目中只用預留一個uwsgi文件夾和ini文件,之後配置中要用)

root@root:$ ls -l
├── .項目目錄其他文件
├── hello.py
├── hello.pyc
├── uwsgi
│   ├── uwsgi.log                  # 日誌文件,通過該文件查看uwsgi的日誌
│   ├── uwsgi.pid                  # pid文件,通過該文件可以控制uwsgi的重啓和停止
│   ├── uwsgi.sock                 # socket文件,配置nginx時候使用
│   └── uwsgi.status               # status文件,可以查看uwsgi的運行狀態
└── uwsgi.ini

uwsgi.ini文件,配置參數詳解
master = true
#啓動主進程,來管理其他進程,其它的uwsgi進程都是這個master進程的子進程,如果kill這個master進程,相當於重啓所有的uwsgi進程。

chdir = /web/www/mysite
#在app加載前切換到當前目錄, 指定運行目錄

module = mysite.wsgi
# 加載一個WSGI模塊,這裏加載mysite/wsgi.py這個模塊

py-autoreload=1  
#監控python模塊mtime來觸發重載 (只在開發時使用)

lazy-apps=true  
#在每個worker而不是master中加載應用

socket = /test/myapp.sock
#指定socket文件,也可以指定爲127.0.0.1:9000,這樣就會監聽到網絡套接字

processes = 2 #啓動2個工作進程,生成指定數目的worker/進程

buffer-size = 32768
#設置用於uwsgi包解析的內部緩存區大小爲64k。默認是4k。

daemonize = /var/log/myapp_uwsgi.log
# 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器

log-maxsize = 5000000 #設置最大日誌文件大小

disable-logging = true #禁用請求日誌記錄

vacuum = true #當服務器退出的時候自動刪除unix socket文件和pid文件。

listen = 120 #設置socket的監聽隊列大小(默認:100)

pidfile = /var/run/uwsgi.pid #指定pid文件

enable-threads = true
#允許用內嵌的語言啓動線程。這將允許你在app程序中產生一個子線程

reload-mercy = 8
#設置在平滑的重啓(直到接收到的請求處理完才重啓)一個工作子進程中,等待這個工作結束的最長秒數。這個配置會使在平滑地重啓工作子進程中,如果工作進程結束時間超過了8秒就會被強行結束(忽略之前已經接收到的請求而直接結束)

max-requests = 5000
#爲每個工作進程設置請求數的上限。當一個工作進程處理的請求數達到這個值,那麼該工作進程就會被回收重用(重啓)。你可以使用這個選項來默默地對抗內存泄漏

limit-as = 256
#通過使用POSIX/UNIX的setrlimit()函數來限制每個uWSGI進程的虛擬內存使用數。這個配置會限制uWSGI的進程佔用虛擬內存不超過256M。如果虛擬內存已經達到256M,並繼續申請虛擬內存則會使程序報內存錯誤,本次的http請求將返回500錯誤。

harakiri = 60
#一個請求花費的時間超過了這個harakiri超時時間,那麼這個請求都會被丟棄,並且當前處理這個請求的工作進程會被回收再利用(即重啓)


常用命令

uwsgi --ini uwsgi.ini             # 啓動
uwsgi --reload uwsgi.pid          # 重啓
uwsgi --stop uwsgi.pid            # 關閉

關於uwsgi部署flask報unable to find "application" callable in file這個錯誤的可能性原因,如下:

unable to find "application" callable in file ./__init__.py
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***

你的啓動文件缺少flask框架的實例,必須暴露變量。

app = Flask(__name__)

uwsgi的配置錯誤

chdir = /user
wsgi-file = (應該爲chdir的相對目錄,而不是配置文件的相對目錄)

 報錯unable to load configuration from /opt/bhcrjy/uwsgi的原因:

*** Operational MODE: preforking ***
[init_app]redisPool is  32376
[init_app]redisPool is  32376
 * Serving Flask app "uwsgi_file___bhcrjyApp_runserver" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
// 錯誤在這裏,啓動後立馬停止
unable to load configuration from /opt/bhcrjy/uwsgi
VACUUM: pidfile removed.

原因是因爲,你的啓動文件中app.run(),應該移除或者單獨一個文件中,因爲WSGI會自動調用Flask的callable方法去啓動。

 

 

REF

https://www.jianshu.com/p/31f95af5ce51

https://blog.csdn.net/weixin_45707980/article/details/121288213

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章