当前位置: 首页 > news >正文

linux命令 systemctl 和 supervisord 区别及用法解读

目录

  1. 基础与背景
  2. 服务管理范围
  3. 配置文件和管理方式
  4. 监控与日志
  5. 依赖管理
  6. 适用场景
  7. 常用命令对照表
  8. 实际应用场景举例
  9. 优缺点对比小结
  10. 参考链接

1. 基础与背景

systemctl 和 supervisord 都是用于管理和控制服务(进程)的工具,但它们在设计、使用场景和功能上有所不同。以下是它们之间的主要区别:

  • systemctl:
    • systemctl 是 systemd 的一部分,systemd 是 Linux 系统中的系统和服务管理器,负责在系统启动时管理系统进程、挂载文件系统、处理网络配置等。
    • systemctl 通过管理 systemd 单元(unit files)来控制系统服务。
    • systemctl 通常是现代 Linux 发行版中的默认服务管理工具(如 CentOS 7+, Ubuntu 15.04+)。
  • supervisord:
    • supervisord 是一个进程管理工具,专门用于监控和管理独立的后台进程。
    • 它是 Python 编写的,并且被设计用于跨平台运行,主要用于启动、监控、重启应用程序。
    • supervisor 最早主要用于开发环境和特定服务的进程管理,通常不管理系统服务。

2. 服务管理范围

  • systemctl(systemd):
    • 负责管理所有系统服务,包括启动、停止、重启、启用(开机启动)和禁用服务。
    • 可以管理系统级别的服务,比如网络服务、守护进程等。
    • 更侧重于系统启动时的服务管理,并且可以管理定时任务(通过 timers)、设备挂载、网络配置等。
  • supervisord:
    • 主要用于管理用户定义的应用进程,例如应用程序、后台任务、Web服务等。
    • 适合多进程的应用程序或需要长期运行的任务的监控和管理。
    • supervisor 可以定期监控和重启由于异常退出的进程。

3. 配置文件和管理方式

  • systemctl:
    • 使用 unit files,它们位于 /etc/systemd/system/ 或 /lib/systemd/system/ 目录下。这些文件通常以 .service、.target、.mount、.timer 等后缀结尾。
    • 配置文件格式相对固定,基于 INI 风格,包含 [Unit]、[Service]、[Install] 等配置段。
    • 常见命令:
      • systemctl start/stop/restart :启动/停止/重启服务。
      • systemctl enable/disable :启用/禁用服务开机启动。

systemctl(systemd)配置文件示例

示例1:简单的自定义服务
[Unit]
Description=My Simple Service
After=network.target[Service]
ExecStart=/usr/bin/python3 /opt/myscript.py
Restart=on-failure[Install]
WantedBy=multi-user.target

说明:此配置定义了一个在网络服务启动后运行的 Python 脚本服务,异常退出时自动重启。

示例2:带环境变量和工作目录的服务
[Unit]
Description=Node.js Web App[Service]
WorkingDirectory=/opt/webapp
ExecStart=/usr/bin/node server.js
Environment=NODE_ENV=production PORT=8080
Restart=always[Install]
WantedBy=multi-user.target

说明:此配置用于 Node.js Web 应用,指定了工作目录和环境变量,并设置为始终重启。

  • supervisord:
    • 使用独立的配置文件,通常位于 /etc/supervisor/supervisord.conf 或类似目录中。
    • 进程定义在 [program:x] 区块中,指定每个进程的启动命令、环境变量、日志、重启策略等。
    • 常见命令:
      • supervisorctl start/stop :启动/停止某个进程。
      • supervisorctl reread/update:重新读取配置文件并应用更改。

supervisord 配置文件示例

示例1:管理单个 Python 进程
[program:myworker]
command=python3 /opt/worker.py
autostart=true
autorestart=true
stderr_logfile=/var/log/myworker.err.log
stdout_logfile=/var/log/myworker.out.log

说明:此配置定义了一个自动启动和自动重启的 Python worker 进程,并分别记录标准输出和错误日志。

示例2:管理 Node.js 服务并设置环境变量
[program:webapp]
command=node /opt/webapp/server.js
directory=/opt/webapp
autostart=true
autorestart=true
environment=NODE_ENV="production",PORT="8080"
stdout_logfile=/var/log/webapp.log
stderr_logfile=/var/log/webapp.err.log

说明:此配置用于 Node.js 服务,指定了工作目录和环境变量,并配置了日志输出。

supervisord 可视化界面(Web UI)配置示例

Supervisor 自带一个简单的 Web 管理界面,可以通过配置 [inet_http_server] 实现。该界面支持进程的启动、停止、重启、日志查看等操作。

示例:启用 Web 管理界面
[inet_http_server]
port=0.0.0.0:9001        ; 监听所有网卡的 9001 端口
username=admin          ; 登录用户名
password=123456         ; 登录密码

说明:此配置启用了 supervisord 的 Web UI,访问 http://服务器IP:9001 即可进入管理界面。可通过用户名和密码进行身份验证。

Web UI 功能简介:

  • 查看所有受管进程的状态
  • 启动、停止、重启进程
  • 查看进程日志
  • 便于远程管理和监控

注意:生产环境建议配置防火墙或反向代理,限制 Web UI 的访问范围,避免安全风险。

详细说明

Supervisor 的 Web UI 是一个基于 HTTP 的管理界面,默认集成在 supervisord 主进程中,无需额外安装。通过 Web 浏览器即可远程管理和监控所有受 supervisord 管理的进程。

1. 访问方式

  • 启用 [inet_http_server] 后,在浏览器中访问 http://<服务器IP>:9001
  • 需要输入配置文件中设置的用户名和密码进行登录。
  • 支持局域网和公网访问(建议生产环境仅限内网或通过 VPN/反向代理访问)。

2. 界面主要功能

  • 进程状态总览:主界面显示所有受管进程的名称、状态(RUNNING、STOPPED、FATAL 等)、启动时间、进程号等。
  • 进程操作:可对单个或全部进程进行启动、停止、重启操作。
  • 日志查看:可直接在网页中查看每个进程的标准输出(stdout)和标准错误(stderr)日志,支持实时刷新。
  • 进程分组:如果配置了 group,可以分组显示和管理进程。
  • 自动刷新:界面支持自动刷新,便于实时监控。

3. 常见操作演示

  • 启动/停止/重启进程:点击对应进程后的"Start"、“Stop”、"Restart"按钮即可。
  • 查看日志:点击"View Log"可弹出日志窗口,支持滚动和刷新。
  • 一键操作全部进程:页面顶部有"Start All"、“Stop All”、"Restart All"按钮。

4. 权限与安全建议

  • 默认仅支持单一用户名和密码,建议设置复杂密码。
  • 建议仅监听 127.0.0.1(即 port=127.0.0.1:9001),通过 SSH 隧道、VPN 或 Nginx 反向代理(带认证)进行访问。
  • 如需公网访问,务必做好防火墙限制和强密码设置。
  • 不支持多用户分级权限,适合小型团队或个人运维场景。

5. 常见问题

  • 端口被占用:如 9001 端口被占用,可修改为其他未被占用端口。
  • 无法访问:检查 supervisord 是否已重启、端口监听地址是否正确、防火墙是否放行。
  • 安全风险:切勿将 Web UI 直接暴露在公网,避免被暴力破解。

6. 相关截图与文档

  • 官方界面截图可参考:Supervisor Web UI 截图
  • 更多配置说明见:Supervisor 官方文档 - inet_http_server

4. 监控与日志

  • systemctl:
    • systemd 自带强大的日志管理功能,通过 journalctl 来查看系统和服务的日志。
    • 支持将日志集中管理并可以通过高级过滤器进行查询。
  • supervisord:
    • supervisor 支持为每个进程定义独立的日志文件,并可以配置标准输出和错误输出重定向。
    • 可以实时查看每个进程的日志文件,但不会像 systemd 那样提供统一的日志查看命令。

5. 依赖管理

  • systemctl:
    • 可以处理服务之间的依赖关系。例如,服务 A 依赖于服务 B,那么 systemd 可以确保在启动 A 之前先启动 B。
    • 可以通过 Before=, After=, Requires=, Wants= 等指令来设置依赖顺序。
  • supervisord:
    • 不直接处理依赖关系。各个进程通常被独立管理,如果需要依赖关系管理,需要手动配置顺序或借助外部工具。

6. 适用场景

  • systemctl(systemd):
    • 更适合管理系统级别的服务、网络服务、守护进程、设备挂载等。
    • 推荐用于服务器和系统服务的管理,因为它提供了丰富的功能来处理服务依赖、启动顺序、资源限制等。
  • supervisord:
    • 更适合管理独立应用程序、Web 服务、批处理任务或需要独立监控的进程。
    • 尤其适合开发环境或容器中需要管理多个进程的情况。

7. 常用命令对照表

功能systemctl 命令supervisord/supervisorctl 命令
启动服务/进程systemctl start supervisorctl start
停止服务/进程systemctl stop supervisorctl stop
重启服务/进程systemctl restart supervisorctl restart
查看状态systemctl status supervisorctl status
开机自启systemctl enable 配置 autostart=true
禁用开机自启systemctl disable 配置 autostart=false
查看日志journalctl -u 查看配置的日志文件
重新加载配置systemctl daemon-reloadsupervisorctl reread/update

8. 实际应用场景举例

  • systemctl 典型场景
    • 管理 Nginx、MySQL、Docker 等系统服务
    • 设置服务开机自启
    • 管理定时任务、设备挂载等
  • supervisord 典型场景
    • 管理 Python、Node.js 等 Web 应用进程
    • 监控爬虫、定时脚本等长期运行的任务
    • 容器(如 Docker)中一键管理多个自定义进程

9. 优缺点对比小结

对比项systemctl (systemd)supervisord
管理对象系统服务、守护进程应用进程、用户自定义进程
配置复杂度较高,需编写 unit 文件较低,配置灵活
日志管理集中管理,支持过滤各进程独立日志
依赖管理支持服务依赖、启动顺序不支持,需要手动处理
适用场景系统服务、服务器、生产环境应用进程、开发环境、容器
自动重启支持(需配置 Restart)默认支持
跨平台仅 Linux跨平台(Python 环境)

10. 参考链接

  • systemd 官方文档
  • Supervisor 官方文档
  • systemctl 使用详解
  • Supervisor 配置详解

两者可以根据不同的场景结合使用。如果你的需求是管理系统服务,systemctl 是更合适的选择;如果你需要监控和自动重启特定的应用程序进程,supervisord 更适合。

相关文章:

  • 卷积神经网络(CNN)完全指南:从原理到实战
  • ESP32基础知识1:项目工程建立和烧录
  • 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
  • 操作系统学习(十)——文件系统
  • Marvin - 生成结构化输出 和 构建AI工作流
  • BLIP-2
  • Gunicorn 配置文件参数详解
  • Git初识Git安装
  • 税法 -2.2- 增值税-允许抵扣的进项税额
  • 6月1日星期日今日早报简报微语报早读
  • CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures
  • python学习打卡day42
  • 2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress
  • STM32F407寄存器操作(多通道单ADC+DMA)
  • PINN for PDE(偏微分方程)1 - 正向问题
  • Beta分布Dirichlet分布
  • Baklib知识中台加速企业服务智能化实践
  • 算法学习--持续更新
  • 头歌之动手学人工智能-Pytorch 之优化
  • 接口自动化常用断言方式
  • 网站备案删除/广告主广告商对接平台
  • 主播网站怎么建立/百度风云榜游戏
  • 刷q币网站建设/如何提高seo关键词排名
  • 江苏网站建设价格/网站管理工具
  • 重庆网站怎么设置/拼多多代运营收费标准
  • 网站的后台怎么做/成人职业技能培训班