如何在Linux中连续运行python服务?

如何在Linux中连续运行python服务?

最近我使用 python 创建了一个服务。它包含while True:一个执行服务的函数。鉴于这是我第一次提供类似服务之类的东西,并且我向客户收费,我对更有经验的开发人员有一些基本问题(抱歉)。

  1. 屏幕。目前,为了运行我的应用程序,我使用 screen。我通过 ssh 连接服务器,进入屏幕,python service.py分离并关闭 ssh。这是最好的方法吗?其他人做什么?当它是常规的东西时,我使用crontab.但现在它是一个持续运行的服务。

  2. 一切都在try:-except:因此,如果发生意外情况,它会向我发送电子邮件。尽管如此,如果屏幕突然关闭(不确定为什么会发生这种情况),我将不会收到电子邮件,并且当我的服务实际上无法正常工作时,我会放松地睡觉。人们会添加额外的警报吗?比如,为进程命名并添加一些检查器,如果进程没有运行,会收到电子邮件吗?

  3. 我应该将所有内容封装在 docker 容器上吗?如果只是一个应用不需要扩展呢?这是一个好方法吗?

提前致谢。

答案1

正如您所提到的,创建 Docker 映像并运行它是一种选择。

然而,*nix 系统上更简单的方法可能是使用supervisord 来运行服务。不仅如此,我还python运行了各种脚本。我什至在不需要对这些简单的 Web 服务进行 docker 化的情况下运行 Flask 应用程序。perlshellrubysupervisordsupervisord

事实上,在少数情况下,当我必须在 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

配置中的自动重新启动将确保服务因某种原因终止时重新启动。自动启动将确保如果您重新启动系统,只要您启用了supervisord以在系统引导时启动,该服务就会启动。

创建服务后,您可以将其运行为:

$ sudo supervisorctl start service_name

您可以在需要时检查状态 -

$ sudo supervisorctl stop service_name

要停止您使用的服务 -

$ sudo supervisorctl stop service_name

您可以在这里阅读更多相关信息 -http://supervisord.org/

相关内容