我刚刚完成了我的应用程序并想部署它。但是如何将我的应用程序作为服务/守护程序运行?
谷歌搜索显示了一些使用一些 python 库的不同方法,扭曲了,我可以将 Python 脚本作为服务运行吗?. 但不知道该怎么做。
有人做过这个吗?是否有最佳实践方法?
..弗雷德里克
我刚刚完成了我的应用程序并想部署它。但是如何将我的应用程序作为服务/守护程序运行?
谷歌搜索显示了一些使用一些 python 库的不同方法,扭曲了,我可以将 Python 脚本作为服务运行吗?. 但不知道该怎么做。
有人做过这个吗?是否有最佳实践方法?
..弗雷德里克
由于您希望您的应用程序独立运行(如果我理解正确的话),您可以像处理任何其他(非 Web)应用程序一样处理它。
如果您只想让您的程序在后台运行,您可以阅读这篇解释如何创建守护程序应用程序的收据,并对这个主题进行很好的讨论(在评论中)。
另一方面,如果您想使用您的应用程序(在每个系统启动时启动)创建一个“系统守护程序”,我会使用 shell 脚本。要了解如何为您的系统创建启动脚本,您可以从您机器上的其他启动脚本中获得灵感。一种解决方案是使用(从启动脚本)在后台运行您的程序python my_app.py &
,然后使用该$!
变量获取进程的 pid 并将其存储到文件中,这样您还可以通过读取来停止进程“pid 文件”并使用kill
命令(向SIGINT
您的进程发送一个将KeyboardInterrupt
引发在您的应用程序中引发的异常)。
编辑:
在您的问题评论中,您说 usingpython main.py &
将是不安全的,因为如果应用程序失败/崩溃,它不会重新启动,但这与您系统上的任何其他守护程序相同(例如,如果 Apache 崩溃,它不会自行重新启动)。如果您想在应用程序崩溃时重新启动它,则必须编写第二个守护程序,它会定期检查您的应用程序是否仍在运行,并在需要时重新启动它。
关于日志记录,您可以将应用程序输出到启动脚本 ( )stdout/stderr
并将其重定向到启动脚本 ( ),或者使用模块python main.py &> /path/to/app.log &
处理来自应用程序的日志记录。logging
或者,您可以使用 supervisord 轻松运行和控制去守护进程,并记录其 stdout/stderr 输出。
妖魔化一个python脚本实际上就是妖魔化python。
如果您是 root,请考虑使用 GNU screen 来完成这项工作。Screen 本身将处理终端控制,这通常是关于构建守护进程的最复杂的任务。
启动一个屏幕,运行您的程序,分离,然后根据需要注销,它会留下一个类似守护进程的进程。这种方法特别有效,尤其是当您的程序正在构建、不是很稳定或转储许多快速编写的消息以进行调试时。
在守护程序时仍然需要注意一些事项,例如将工作目录更改为 / 并关闭未使用的描述符,以防您必须卸载文件系统或重新编程信号句柄等。但是,大多数情况是如果您从 init 或干净的登录会话守护进程,则感到满意;只要记住将目录更改为“/”,通常就足够了。
但是使用屏幕并不能帮助在崩溃中幸存下来,崩溃始终是程序员必须处理的问题。