Python
如何在 Linux 中執行連續的 python 服務?
最近我使用python創建了一個服務。它包含
while True:
一個服務。鑑於這是我第一次提供類似服務之類的東西並且我向客戶收費,我有一些基本問題(抱歉)請教更有經驗的開發人員。
- 螢幕。目前要執行我的應用程序,我使用螢幕。我 ssh 伺服器,進入螢幕,
python service.py
分離並關閉 ssh。這是最好的方法嗎?別人做什麼?當它是我經常使用的東西時crontab
。但現在它是一個持續執行的服務。- 一切都在裡面
try:
-except:
所以如果發生意外情況,它會向我發送一封電子郵件。儘管如此,如果螢幕突然關閉(不知道為什麼會發生這種情況),我將不會收到電子郵件,並且當我的服務實際上不工作時,我會輕鬆入睡。人們會添加額外的警報嗎?比如,給程序命名並添加一些檢查器,如果程序沒有執行,接收電子郵件?- 我應該把所有東西都封裝在一個 docker 容器上嗎?如果只是一個應用程序不需要擴展?這是一個好方法嗎?
提前致謝。
正如您所提到的,創建 Docker 映像並執行它是一種選擇。
然而,在 *nix 系統上更簡單的方法是使用 supervisord 來執行服務。不僅如此
python
,我還執行過各種perl
,shell
和ruby
下的腳本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/