gunicorn未重启,导致代码没拉到最新问题。

问题描述:

我的测试环境的django项目是用gunicorn启动的,然后我本地使用python managy.py启动的,新写了个接口,在本地测试没问题,在测试环境报404。我发现发了最新代码到远端 ,然后我在测试环境pull下来的时候出问题了,代码不是最新的,后来我的经理告诉我说要重启gunicorn的主进程 给了我一条指令"kill -HUP gunicorn_pid(最小的)”,针对这个问题我大致做了点功课,大家体会一下。

解决问题:

上述问题是由于在测试环境中,Django 是由 gunicorn 启动的,而 gunicorn 在加载新的代码更新时不会自动刷新。简单来说,当推送新的代码并 pull 下来后,gunicorn 仍在运行旧的代码,因此需要重启进程以加载最新的代码。

指令是:

kill -HUP <gunicorn_pid>

这条指令的含义如下:

  1. kill -HUP:这是一个向进程发送 HUP(Hangup)信号的命令。对于 gunicorn 来说,接收到 HUP 信号会触发它优雅地重启主进程(master process),同时加载新的代码,而不会中断当前的连接。它相当于热重启,可以不影响服务的可用性。

  2. gunicorn_pid:这是 gunicorn 主进程的进程号(PID)。主进程通常是 gunicorn 启动时的最早进程,所有的 worker 进程都是由它管理的。你需要找到这个主进程的 PID,然后用这条命令对它进行重启。

  3. “最小的”:因为 gunicorn 启动时会创建一个主进程和多个 worker 进程,而主进程的 PID 通常是最小的,所以你需要找到这个最小的 PID 来发送 HUP 信号。

如何找到 gunicorn 的 PID

可以通过以下命令找到 gunicorn 的进程:

ps aux | grep gunicorn

这会列出所有 gunicorn 相关的进程,找到最小的那个进程号(通常是主进程的 PID),然后执行 kill -HUP 来让 gunicorn 重新加载最新的代码。

总结

遇到这种问题所要做的是:

  1. 通过 ps aux | grep gunicorn 找到主进程的 PID。
  2. 使用 kill -HUP 重启主进程,这样 gunicorn 会加载最新的代码。

这个过程会在不终止服务的情况下,让 gunicorn 优雅地重启并应用新的代码。

你可能感兴趣的:(gunicorn,linux,运维)