CentOS8伺服器之python程式後臺常駐
這個作業屬於哪個課程 | 2021春軟體工程實踐W班 |
---|---|
這個作業要求在哪裡 | 作業要求 |
這個作業的目標 | 個人技術部落格 |
其他參考文獻 | screen命令的使用 supervisor的使用 |
技術概述
主要解決python程式部署到CentOS8之後怎麼進行後臺常駐的問題。團隊專案時需要將自己的python程式碼放在伺服器上跑,並且保證持續執行,不然小程式端和後臺Web端無法獲取資料並顯示圖表。建議使用screen命令而不是supervisor,screen命令較簡單且有效,而supervisor配置比較麻煩,有時程式仍然會自動停止【至少我用的時候supervisor會自己停掉】。
技術詳述
這裡介紹兩種方法,而我推薦使用第一種。命令執行環境為CentOS8。
screen命令
-
如果不是root使用者先切換成root使用者
sudo su root
-
安裝screen命令
yum install screen #安裝
-
建立screen會話
screen -S test # test 為虛擬終端名
在本次團隊中,我設定虛擬終端名為:
electromobile
,因此命令如下:screen -S electromobile
-
這時會出現一個新的終端視窗:
切換到程式所在目錄後:
cd /root/yolov4-count/ # cd後的路徑為程式所在目錄
如果有虛擬環境則啟動虛擬環境:
source venv/bin/activate # 虛擬環境的目錄
在該視窗下輸入程式的執行命令:
python3 main.py
這時候在新的終端視窗就能看到程式開始運行了,可以斷開遠端連結啦。
-
回來檢查一下程式是否真的在執行,重新登入遠端終端,切換成root使用者後,輸入命令:
screen -r electromobile # electromobile 為虛擬終端名
這時候就會跳轉到虛擬終端名為
electromobile
的終端視窗,可以看到程式仍然在執行。
supervisor
-
如上,如果不是root使用者先切換成root使用者
-
安裝supervisor:
yum install supervisor
-
一般在路徑
/ect/
下能找到資料夾supervisord.d
: -
在該資料夾下新建一個配置檔案,如
electromobile.conf
: -
配置檔案
electromobile.conf
裡的內容如下:[program:electromobile] command=/root/yolov4-count/venv/bin/python3 /root/yolov4-count/main.py # 第一個引數為虛擬環境中的python3.exe路徑,第二個引數為程式的主程式 autostart=true # 是否自啟動 autorestart=true # 是否自動重啟
-
啟動程式:
supervisorctl start electromoible # start後跟上一步中[program:_______]中的名字
遇到的問題與解決過程
問題一
看到有些教程修改了supervisor的預設配置檔案
supervisord.conf
,又新建了一個自己的配置檔案,也不講為什麼這麼做,極其影響supervisor的使用感。
修改supervisord.conf
是因為在該檔案的末尾指定了supervisor能識別的配置檔案的字尾名:
[include]
files = supervisord.d/*.conf # 有的是*.ini
如果為*.ini
,則自定義配置檔案要為electromobile.ini
;如果修改成如上所述,則自定義配置檔案要改為electromobile.conf
。
問題二
使用supervisor時發現數據庫資料沒有更新,想看是哪裡出了問題,但是覺得修改配置檔案很麻煩,不想在配置檔案中設定日誌log的輸出。
使用sudo supervisorctl tail electromobile stderr
命令,看到報錯資訊,根據報錯修改程式碼。
總結
supervisor對我來說體驗感並不是很好,很容易踩坑,大部分教程難理解。對於伺服器部署新手來說,screen命令更加友好,不需要配置檔案,命令也很容易理解。能達到同樣結果為什麼不選screen呢?
參考部落格
screen命令的使用
原標題:Centos下遠端連線斷開後讓程式繼續執行解決辦法
作者:不稚名
supervisor的使用
原標題:supervisor 安裝、配置、常用命令
作者:削微寒