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

news2025/7/21 9:27:22

目录

  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 更适合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

&#x1f4c1; 示例项目结构&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

stm32 + ads1292心率检测报警设置上下限

这个项目是在做心率检测的时候一个小伙伴提出来的&#xff0c;今年五一的时候提出来的想法&#xff0c;五一假期的时候没时间&#xff0c;也没心情做这个&#xff0c;就把这个事情搁置了&#xff0c;在月中做工作计划的时候&#xff0c;就把这个小项目排进来了&#xff0c;五一…

项目练习:element ui 的icon放在button的右侧

文章目录 一、需求描述二、左侧实现三、右侧实现 一、需求描述 我们知道&#xff0c;element ui的button一般都会配置一个icon 这个icon默认是放在左侧的。 如何让它放在右侧了&#xff1f; 二、左侧实现 <el-buttontype"primary"plainicon"el-icon-d-arr…

性能诊断工具AWR配置策略与报告内容解析

AWR&#xff08;Automatic Workload Repository&#xff09;是 Oracle 数据库中的一个重要性能诊断工具。AWR 会按照固定的时间间隔自动收集数据库系统的性能统计信息。这些信息涵盖了数据库运行状态的方方面面&#xff0c;像SQL 执行情况、系统资源利用率、等待事件等。AWR抓取…

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换

基于前两篇的内容&#xff0c;为页面添加主题切换功能&#xff0c;实现网站页面的暗黑模式&#xff1a; Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09;-CSDN博客 Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;…

MySQL 8.0 OCP 英文题库解析(十一)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题91~100 试题91…

ADQ36-2通道2.5G,4通道5G采样PXIE

ADQ36是一款高端12位四通道灵活数据采集板&#xff0c;针对高通道数科学应用进行了优化。ADQ36具有以下特性: 4 / 2模拟输入通道每通道2.5 / 5 GSPS7gb/秒的持续数据传输速率两个外部触发器通用输入/输出&#xff08;GPIO&#xff09;ADQ36数字化仪包括固件FWDAQ ADQ36简介 特…

数字创新智慧园区建设及运维方案

该文档是 “数字创新智慧园区” 建设及运维方案,指出传统产业园区存在管理粗放等问题,“数字创新园区” 通过大数据、AI、物联网、云计算等数字化技术,旨在提升园区产业服务、运营管理水平,增强竞争力,实现绿色节能、高效管理等目标。建设内容包括智能设施、核心支撑平台、…

【科研绘图系列】R语言绘制森林图(forest plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息介绍 本文介绍使用R语言绘制森林图(forest plot)的方法。首先加载必要的R包(grid、forestploter、openxlsx、stringr),导入并预处…

SpringAI+DeepSeek大模型应用开发实战

内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…

如何以 9 种方式将照片从 iPhone 传输到笔记本电脑

您的 iPhone 可能充满了以照片和视频形式捕捉的珍贵回忆。无论您是想备份它们、在更大的屏幕上编辑它们&#xff0c;还是只是释放设备上的空间&#xff0c;您都需要将照片从 iPhone 传输到笔记本电脑。幸运的是&#xff0c;有 9 种方便的方法可供使用&#xff0c;同时满足 Wind…

根据jvm源码剖析类加载机制

根据jvm源码剖析类加载机制 java Test.class之后的大致流程 java Test.class ----> 对于windows操作系统 ----> java.exe调用jvm.dll文件创建JVM&#xff0c; ----> 在创建JVM中先由C的代码创建Boostarp&#xff08;引导&#xff09;类加载器&#xff0c; ----&g…

DDS通信中间件——DDS-TSN规范

DDS通信中间件——DDS-TSN规范 做了十年DDS通信中间件产品的程序员和大家分享一下对DDS这套规范的个人理解。预期本系列文章将包括以下内容陆续更新&#xff1a; DDS规范概述DCPS规范解读 & QoS策略XTypes规范解读RTPS规范解读DDS安全规范解读DDS-RPC规范解读&#xff08…

JWT安全:弱签名测试.【实现越权绕过.】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

Baklib知识中台加速企业服务智能化实践

知识中台架构体系构建 Baklib 通过构建多层级架构体系实现知识中台的底层支撑&#xff0c;其核心包含数据采集层、知识加工层、服务输出层及智能应用层。在数据采集端&#xff0c;系统支持对接CRM、ERP等业务系统&#xff0c;结合NLP技术实现非结构化数据的自动抽取&#xff1…

VMware Tools 手动编译安装版

OWASPBWA安装VMware tools 安装时&#xff0c;显示如下提示 官方安装手册参考&#xff1a;https://knowledge.broadcom.com/external/article?legacyId1014294 按照提示&#xff0c;下载linux.iso文件&#xff0c;并连接到虚拟机的CDROM里&#xff0c;状态勾选已连接&#x…

android平台驱动开发(六)--Makefile和Kconfig简介

Makefile&#xff1a; 1.编译进内核&#xff0c;还是以模块方式加载 模块方式编译成ko,通常是自己添加脚本方式insmod ,android 平台通常默认有modprobe加载&#xff0c;不需要额外添加insmod脚本 lsmod |grep test 可以查看是否安装成功 rmmod test-m.ko 可以删除ko 2.多…

【手写系列】手写线程池

PS&#xff1a;本文的线程池为演示 Demo&#xff0c;皆在理解线程池的工作原理&#xff0c;并没有解决线程安全问题。 最简单一版的线程池 public class MyThreadPool {// 存放线程&#xff0c;复用已创建的线程List<Thread> threadList new ArrayList<>();publ…

Live Helper Chat 安装部署

Live Helper Chat(LHC)是一款开源的实时客服聊天系统,适用于网站和应用,帮助企业与访问者即时沟通。它功能丰富、灵活、可自托管,常被用于在线客户支持、销售咨询以及技术支持场景。 🧰 系统要求 安装要求 您提供的链接指向 Live Helper Chat 的官方安装指南页面,详细…

ARXML解析与可视化工具

随着汽车电子行业的快速发展,AUTOSAR标准在车辆软件架构中发挥着越来越重要的作用。然而,传统的ARXML文件处理工具往往存在高昂的许可费用、封闭的数据格式和复杂的使用门槛等问题。本文介绍一种基于TXT格式输出的ARXML解析方案,为开发团队提供了一个高效的替代解决方案。 …