Restart=on-failure vs Restart=always
| 选项 | 含义 | 对 FastAPI/Gunicorn 的适用性 |
|---|---|---|
on-failure |
仅在服务异常退出(非 0 状态码或被信号杀掉)时重启 | 如果服务正常退出(状态码 0),systemd 不会重启。适合偶尔需要手动停止的服务。 |
always |
无论退出状态码是什么,都会重启 | 对 Web 服务和 API 守护进程更合适,保证服务 24/7 持续运行,即便被人为或脚本正常退出,也会重启。 |
FastAPI + Gunicorn
- Gunicorn 是长期运行的服务,通常希望 服务一直在线。
- 如果出现崩溃或异常退出,必须自动重启。
- 偶尔手动停止(比如部署更新)时,状态码可能为 0,如果用 on-failure,不会自动重启,但大部分生产环境希望 尽快恢复服务。
推荐配置
Restart=always
RestartSec=3
- Restart=always → 确保服务持续运行
- RestartSec=3 → 防止服务崩溃时无限循环重启过快
生产环境中几乎所有 Web API 服务都推荐 always,除非你明确希望手动停止时不重启。