1. 程式人生 > 其它 >CentOS8伺服器之python程式後臺常駐

CentOS8伺服器之python程式後臺常駐

這個作業屬於哪個課程 2021春軟體工程實踐W班
這個作業要求在哪裡 作業要求
這個作業的目標 個人技術部落格
其他參考文獻 screen命令的使用
supervisor的使用

技術概述

主要解決python程式部署到CentOS8之後怎麼進行後臺常駐的問題。團隊專案時需要將自己的python程式碼放在伺服器上跑,並且保證持續執行,不然小程式端和後臺Web端無法獲取資料並顯示圖表。建議使用screen命令而不是supervisor,screen命令較簡單且有效,而supervisor配置比較麻煩,有時程式仍然會自動停止【至少我用的時候supervisor會自己停掉】。

技術詳述

這裡介紹兩種方法,而我推薦使用第一種。命令執行環境為CentOS8。

screen命令

  1. 如果不是root使用者先切換成root使用者

    sudo su root
    
  2. 安裝screen命令

    yum install screen #安裝
    
  3. 建立screen會話

    screen -S test   # test 為虛擬終端名
    

    在本次團隊中,我設定虛擬終端名為:electromobile,因此命令如下:

    screen -S electromobile
    
  4. 這時會出現一個新的終端視窗:

    切換到程式所在目錄後:

    cd /root/yolov4-count/   # cd後的路徑為程式所在目錄
    

    如果有虛擬環境則啟動虛擬環境:

    source venv/bin/activate   # 虛擬環境的目錄
    

    在該視窗下輸入程式的執行命令:

    python3 main.py
    

    這時候在新的終端視窗就能看到程式開始運行了,可以斷開遠端連結啦。

  5. 回來檢查一下程式是否真的在執行,重新登入遠端終端,切換成root使用者後,輸入命令:

    screen -r electromobile  # electromobile 為虛擬終端名
    

    這時候就會跳轉到虛擬終端名為electromobile的終端視窗,可以看到程式仍然在執行。

supervisor

  1. 如上,如果不是root使用者先切換成root使用者

  2. 安裝supervisor:

    yum install supervisor
    
  3. 一般在路徑/ect/下能找到資料夾supervisord.d

  4. 在該資料夾下新建一個配置檔案,如electromobile.conf

  5. 配置檔案electromobile.conf裡的內容如下:

    [program:electromobile]
    command=/root/yolov4-count/venv/bin/python3 /root/yolov4-count/main.py  # 第一個引數為虛擬環境中的python3.exe路徑,第二個引數為程式的主程式
    autostart=true   # 是否自啟動
    autorestart=true   # 是否自動重啟
    
  6. 啟動程式:

    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 安裝、配置、常用命令
作者:削微寒