生产环境系统级服务推荐用 systemd,容器内或应用层进程管理推荐用 Supervisord。systemd 深度集成 Linux 内核支持资源隔离,Supervisord 是用户态 Python 进程且要求被管进程前台运行。
先说结论:系统初始化和服务管理选 systemd,应用层进程守护选 Supervisord。
- 适合:生产环境高可靠性场景用 systemd,容器化或轻量级部署用 Supervisord。
- 重点看:systemd 支持依赖管理和 cgroup 资源限制,Supervisord 配置简单且支持 Web 界面监控。
- 别忽略:Docker 容器内官方不推荐运行 systemd,Supervisord 需确保被管进程不自动 daemonize。
命令速用版
systemd 管理命令使用 systemctl,Supervisord 管理命令使用 supervisorctl。
# systemd 启动服务并开机自启
sudo systemctl start myapp.service
sudo systemctl enable myapp.service
# Supervisord 启动服务并更新配置
sudo supervisorctl start myapp
sudo supervisorctl update为什么会这样
systemd 是 Linux 系统初始化系统和服务管理器,Supervisord 是用户态进程管理工具。systemd 作为 init 进程拥有特殊地位,能控制整个系统生态,而 Supervisord 仅是一个普通应用程序。
systemd 深度集成内核,支持 cgroup 资源隔离、依赖图调度和 Socket 激活。Supervisord 通过 fork/exec 方式启动子进程,依赖 stdout/stderr 重定向管理日志,缺乏系统级资源隔离能力。
分步处理
根据选型结果执行对应配置步骤,systemd 需创建 unit 文件,Supervisord 需创建 ini 配置文件。
systemd 配置步骤:
- 创建文件/etc/systemd/system/myapp.service,填写 ExecStart 和 Restart 策略。
- 执行 sudo systemctl daemon-reload 重载配置。
- 执行 sudo systemctl enable myapp 设置开机自启。
Supervisord 配置步骤:
- 在/etc/supervisor/conf.d/目录下创建 myapp.conf,设置 command 和 autorestart=true。
- 执行 sudo supervisorctl reread 读取新配置。
- 执行 sudo supervisorctl update 应用更改并重启进程。
怎么验证是否生效
使用状态查询命令确认进程运行状态,检查日志输出确认无报错。
systemd 验证:执行 systemctl status myapp 查看 Active 状态,使用 journalctl -u myapp 查看统一日志。
Supervisord 验证:执行 supervisorctl status 查看进程状态,查看配置的 stdout_logfile 路径确认日志记录。
常见坑
配置变更生效方式不同,systemd 需 daemon-reload,Supervisord 需 reread 和 update。
Docker 容器内避免使用 systemd,因为容器共享宿主机内核且通常没有完整的 init 系统。Supervisord 要求被管进程必须在前台运行,若程序自动 daemonize 会导致 Supervisord 认为进程退出并反复重启。
systemd 每个程序需单独 unit 文件,Supervisord 单配置文件可控制多个进程组。
常见问题
Docker 容器内能用 systemd 吗?
官方不推荐在容器内运行 systemd。容器共享宿主机内核,缺乏独立 init 系统环境,Supervisord 更适合容器内进程管理。
进程崩溃后会自动重启吗?
两者都支持自动重启。systemd 配置 Restart=on-failure,Supervisord 配置 autorestart=true 即可实现异常退出自动拉起。
日志管理有什么区别?
systemd 使用 journalctl 统一管理日志,支持 StandardOutput=journal。Supervisord 捕获进程标准输出和错误输出到指定文件,支持分开记录 stdout 和 stderr。
参考来源
- CSDN 问答:systemd 与 Supervisor 在进程管理上核心区别是什么
- CSDN 博客:【实战】nohup、Supervisor、systemd 后台管理终极对比 (选型指南)
- Linux 后端守护进程方案对比:systemd vs supervisord vs pm2
- systemd vs supervisord 配置对比分析
- Linux 进程管理工具的使用 (supervisorctl、systemd、init.d 等)