Python

如何在 Linux 中執行連續的 python 服務?

  • February 3, 2021

最近我使用python創建了一個服務。它包含while True:一個服務。鑑於這是我第一次提供類似服務之類的東西並且我向客戶收費,我有一些基本問題(抱歉)請教更有經驗的開發人員。

  1. 螢幕。目前要執行我的應用程序,我使用螢幕。我 ssh 伺服器,進入螢幕,python service.py分離並關閉 ssh。這是最好的方法嗎?別人做什麼?當它是我經常使用的東西時crontab。但現在它是一個持續執行的服務。
  2. 一切都在裡面try:-except:所以如果發生意外情況,它會向我發送一封電子郵件。儘管如此,如果螢幕突然關閉(不知道為什麼會發生這種情況),我將不會收到電子郵件,並且當我的服務實際上不工作時,我會輕鬆入睡。人們會添加額外的警報嗎?比如,給程序命名並添加一些檢查器,如果程序沒有執行,接收電子郵件?
  3. 我應該把所有東西都封裝在一個 docker 容器上嗎?如果只是一個應用程序不需要擴展?這是一個好方法嗎?

提前致謝。

正如您所提到的,創建 Docker 映像並執行它是一種選擇。

然而,在 *nix 系統上更簡單的方法是使用 supervisord 來執行服務。不僅如此python,我還執行過各種perlshellruby下的腳本supervisord。我什supervisord至在不需要對那些簡單的 Web 服務進行 docker 化的情況下執行 Flask 應用程序。

事實上,在少數情況下,當我不得不在 docker 容器中執行多個服務以進行遺留應用程序遷移時,我在 ENTRYPOINT 中使用了 supervisord,雖然不推薦這樣做並且違背了整個容器化和雲原生理念,但我們必須做這些事情有時。

在 Ubuntu 上,您可以安裝supervisord

$ sudo apt install supervisor

然後將 supervisord 服務啟用為 -

$ sudo systemctl enable supervisor
$ sudo systemctl start supervisor

範例配置文件可以如下 -

$ sudo vi /etc/supervisor/conf.d/service_name.conf
[program:service_name]
command=/usr/local/bin/python_script.py
directory=/home/app
user=app
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stdout_logfile = /var/log/supervisor/service_name.log
redirect_stderr = true

配置中的 autorestart 將確保在服務因某種原因終止時重新啟動。自動啟動將確保如果您重新啟動系統,該服務將在其啟動時出現,前提是您已啟用 supervisord 以在系統啟動時啟動。

創建服務後,您可以將其執行為-

$ sudo supervisorctl start service_name

您可以在需要時檢查狀態 -

$ sudo supervisorctl stop service_name

要停止您使用的服務 -

$ sudo supervisorctl stop service_name

您可以在此處閱讀更多相關資訊 - http://supervisord.org/

引用自:https://unix.stackexchange.com/questions/632062