# 优雅重启与关闭

URL: https://caijiao.org/pingora/graceful_restart_and_graceful_shutdown
Source: docs/pingora/graceful_restart_and_graceful_shutdown.md
Description: 学习如何优雅地重启和关闭 Pingora 服务器，确保在更新或维护期间不中断现有连接。

在生产环境中，**优雅重启（graceful restart）** 和 **优雅关闭（graceful shutdown）** 是保障服务连续性的关键操作。  
Pingora 支持平滑地处理这些操作，以避免正在进行的请求被中断。

## 优雅重启（Graceful Restart）

当你更新了配置文件或二进制程序时，可以通过 **HUP 信号** 触发 Pingora 的优雅重启：

```bash
kill -HUP $(cat /var/run/pingora.pid)
````

该命令的行为包括：

* Pingora 接收到信号后，会启动一个新的工作进程；
* 新进程接管新连接；
* 旧进程继续处理正在进行的请求；
* 当旧进程完成所有请求后自动退出。

这种机制确保了在部署更新时不会导致连接中断或丢失。

## 优雅关闭（Graceful Shutdown）

如果需要下线或停止服务，也可以通过 **TERM 信号** 进行优雅关闭：

```bash
kill -TERM $(cat /var/run/pingora.pid)
```

Pingora 收到该信号后会：

1. 停止接受新的连接；
2. 等待现有连接完成；
3. 在所有请求完成后安全退出。

这种方式适用于系统维护、版本切换或手动关闭服务场景。

## 超时关闭机制

在部分情况下（例如连接长时间未结束），可以设置超时时间，Pingora 会在超时后强制退出。
该参数通常在配置文件中设置，例如：

```yaml
shutdown_timeout: 30s
```

表示等待最多 30 秒后强制终止进程。

## 示例：安全部署脚本

你可以编写一个简单的部署脚本来实现自动优雅重启：

```bash
#!/bin/bash
echo "Reloading Pingora gracefully..."
kill -HUP $(cat /var/run/pingora.pid)
sleep 5
systemctl status pingora
```

---

通过优雅重启与关闭机制，Pingora 能够在不中断服务的前提下完成配置更新与维护操作，大大提升了系统的稳定性与可用性。
