作为前言,我有一个运行 Flask 的 Python 脚本,由作为服务运行的 Gunicorn 提供服务。该服务执行的一个命令是一个长时间运行的函数,运行时间从 5 到 10 分钟不等。当gunicorn服务收到SIGTERM时,它会等待10分钟,然后自行终止,这样长时间运行的进程就可以继续。
重新启动时的当前操作是等待 10 分钟,终止当前进程,然后启动一个新进程。
我想要在重新启动时执行的操作是向当前服务发送 SIGUSR2 以启动新服务,然后发送 SIGTERM 以结束旧服务。
我相信所有这一切的替代方法是手动发送 SIGUSR2 和 SIGTERM 信号,然后将正在运行的服务的 PID 更新为新的 PID?我不完全确定我最好的选择是什么。
答案1
事实证明我应该更仔细地研究一下 Gunicorn 的内置选项。只需向进程发送 HUP 信号即可挂断主进程,发送绞车来创建新的工作进程,然后终止旧的工作进程并重新连接主进程。