supervisor+daphne+djangochannels

參照官網配置:https://channels.readthedocs.io/en/latest/deploying.htmlhtml

 

1.supervisor

主要是用來管理進程,好比咱們想讓一個進程一直執行當前退出時,自動重啓python

分爲客戶端和服務器端laravel

supervisord

服務器主管名爲supervisord。它負責在本身的調用中啓動子程序,響應來自客戶端的命令,從新啓動崩潰或退出的子進程,記錄其子進程stdout和stderr 輸出,以及生成和處理與子進程生命週期中的點相對應的「事件」。

服務器進程使用配置文件。這一般位於/etc/supervisord.conf中。此配置文件是「Windows-INI」樣式配置文件。經過適當的文件系統權限保持此文件的安全很是重要,由於它可能包含未加密的用戶名和密碼。

supervisorctl

主管的命令行客戶端部分名爲 supervisorctl。它爲supervisord提供的功能提供了相似shell的界面。從 supervisorctl,用戶能夠鏈接到不一樣的 supervisord進程(一次一個),獲取由子進程控制的狀態,中止和啓動子進程,並獲取supervisord的運行進程列表。

命令行客戶端經過UNIX域套接字或Internet(TCP)套接字與服務器通訊。服務器能夠聲明客戶端的用戶在容許他執行命令以前應該提供身份驗證憑據。客戶端進程一般使用與服務器相同的配置文件,但其中包含[supervisorctl]部分的任何配置文件均可以使用。

 

啓動
/usr/local/bin/supervisord -c /etc/supervisord.confshell

 

supervisord,初始啓動Supervisord,啓動、管理配置中設置的進程。
supervisorctl stop programxxx,中止某一個進程(programxxx),programxxx爲[program:chatdemon]裏配置的值,這個示例就是chatdemon。
supervisorctl start programxxx,啓動某個進程
supervisorctl restart programxxx,重啓某個進程
supervisorctl stop all,中止所有進程,注:start、restart、stop都不會載入最新的配置文件。
supervisorctl reload,載入最新的配置文件,並按新的配置啓動、管理全部進程。

安全



啓動守護進程:supervisord -c /etc/supervisor/supervisord.conf 重載配置:supervisorctl reload
報錯信息: 
Error: .ini file does not include supervisorctl section 解決辦法: 一個權限問題,步驟: 1. 先確保supervisord.conf中有[supervisord],[supervisorctl]有這兩個基本模塊,還有[program:XXX]本身程序的配置(能夠在supervisord.conf也能夠在/etc/supervisor/*.ini中) 2. 最關鍵的兩個命令:chmod +x /usr/bin/supervisord chmod +x /usr/bin/supervisorctl chmod +x /etc/supervisord.conf主要是把把相關文件都受權了 3. 把supervisord殺掉後再次啓動supervisord 
Exited too quickly (process log may have details) 解決辦法: 1. 先確認[program:XXX]中本身的程序的command=<啓動命令>和 directory=<運行命令的路徑>沒有問題,python是否是用的本身要的環境的python(好比虛擬環境的),log文件的文件夾是否是已經建立(沒建立的話supervisor沒權限生成log文件),以及改log文件是否是受權給全部用戶了(可參考前面的解決辦法chmod +x aaaaa.log) 2. 確保用上面的配置中的command在指定路徑能夠直接運行不會報錯,這時候通常就不會有什麼問題了。這時候tail你本身的log文件通常就能看到log信息,啓動失敗報錯的信息也會在你的log文件中,照着解決後supervisorctl reload就行了。 3. 若是上面的命令確保能夠跑,但仍是無法正常運行,也看不到本身程序的報錯(否則你就能根據報錯解決問題了),那麼恭喜,你遇到了跟我同樣的狀況。個人解決辦法很詭異,嘗試把[program:XXX]中的名字換成了一個跟啓動命令不同的另外一個名字(不要過短),reload以後竟然就能夠跑了

生成配置文件ruby

安裝好supervisor以後,默認是沒有生成配置文件的。能夠經過如下命令生成配置文件bash

echo_supervisord_conf > /etc/supervisord.conf

咱們一般是把配置文件放到/etc/下面,固然也能夠放到任意路徑下面。服務器

啓動ui

如下啓動順序由上到下優先級,依次遞減加密

supervisord                                   #默認去找$CWD/supervisord.conf,也就是當前目錄
supervisord                                   #默認$CWD/etc/supervisord.conf,也就當前目錄下的etc目錄
supervisord                                   #默認去找/etc/supervisord.conf的配置文件
supervisord -c /home/supervisord.conf         #到指定路徑下去找配置文件

supervisor組件

還有一個比較坑的  若是你是直接把laravel官方文檔中的supervisor配置拿過來的話 必定記得改驅動以下圖所

nodaemon=false               ; 若是是true,supervisord進程將在前臺運行
                               默認爲false,也就是後臺以守護進程運行。。。非必須設置
 
上面是重載,下面是從新加載配置文件,當咱們修改文件從新啓動
supervisorctl reload
### 或者 supervisorctl -c /etc/supervisord.conf

默認supervisor是不啓動的
那個-n -c 是個前臺程序沒有用的

# 若是是 Ubuntu 添加如下內容(這裏要寫全路徑,由於此時PATH的環境變量未必設置) /usr/local/bin/supervisord -c /etc/supervisord.conf # 若是是 Centos 添加如下內容 /usr/bin/supervisord -c /etc/supervisord.conf

查看正在守候的進程

若是沒有開機自啓,那麼最開始是須要啓動服務的。。。須要unlinksupervisorctl
本站公眾號
   歡迎關注本站公眾號,獲取更多信息