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

article/2025/8/14 13:40:14

目录

  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.hkcw.cn/article/FbFmBAVBsk.shtml

相关文章

用mediamtx搭建简易rtmp,rtsp视频服务器

简述&#xff1a; 平常测试的时候搭建rtmp服务器很麻烦&#xff0c;这个mediamtx服务器&#xff0c;只要下载就能运行&#xff0c;不用安装、编译、配置等&#xff0c;简单易用、ffmpeg推流、vlc拉流 基础环境&#xff1a; vmware17&#xff0c;centos10 64位&#xff0c;wi…

YOLOv5-入门篇笔记

1.创建环境 conda create -n yolvo5 python3.8 去pytorch.org下载1.8.2的版本。 pip --default-timeout1688 install torch1.8.2 torchvision0.9.2 torchaudio0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111 github上下载yolov5的zip pip --def…

设计模式-行为型模式-模版方法模式

概述 模板方法模式 :Template Method Pattern : 是一种行为型设计模式. 它定义了一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中实现。 模板方法使得子类可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步骤。 符合 开闭原则。 可以在算法的流程中&…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

十三、【核心功能篇】测试计划管理:组织和编排测试用例

【核心功能篇】测试计划管理&#xff1a;组织和编排测试用例 前言准备工作第一部分&#xff1a;后端实现 (Django)1. 定义 TestPlan 模型2. 生成并应用数据库迁移3. 创建 TestPlanSerializer4. 创建 TestPlanViewSet5. 注册路由6. 注册到 Django Admin 第二部分&#xff1a;前端…

Python训练第四十一天

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

【C++进阶篇】哈希表的封装(赋源码)

C哈希表终极封装指南&#xff1a;从线性探测到STL兼容的迭代器魔法 一. 哈希表的封装1.1 基本结构1.1.1 插入1.1.2 查找1.1.3 删除1.1.4 Begin()1.1.5 End()1.1.6 构造函数1.1.7 析构函数 1.2 迭代器设计&#xff08;重点&#xff09;1.2.1 重载operator*()1.2.2 重载operator-…

238除自身以外数组的乘积

题目链接: https://leetcode.cn/problems/product-of-array-except-self/description/解法一&#xff1a;暴力解法 直接遍历一遍数组&#xff0c;求该数组的除该数之外的乘积&#xff0c;但是超时时间复杂度为n方。 vector<int> productExceptSelf(vector<int>&a…

主数据编码体系全景解析:从基础到高级的编码策略全指南

在数字化转型的浪潮中&#xff0c;主数据管理&#xff08;MDM&#xff09;已成为企业数字化转型的基石。而主数据编码作为MDM的核心环节&#xff0c;其设计质量直接关系到数据管理的效率、系统的可扩展性以及业务决策的准确性。本文将系统性地探讨主数据编码的七大核心策略&…

C# 类和继承(构造函数的执行)

构造函数的执行 在前一章中&#xff0c;我们看到了构造函数执行代码来准备一个即将使用的类。这包括初始化类的静 态成员和实例成员。在这一章&#xff0c;你会看到派生类对象有一部分就是基类对象。 要创建对象的基类部分&#xff0c;需要隐式调用基类的某个构造函数。继承层…

79. Word Search

题目描述 79. Word Search 回溯 代码一&#xff0c;使用used数组 class Solution {vector<pair<int,int>> directions{{0,1},{0,-1},{1,0},{-1,0}};vector<vector<bool>> used; public:bool exist(vector<vector<char>>& board, st…

大模型备案中语料安全详细说明

《AIGC安全要求》针对语料安全&#xff0c;在语料来源授权合法、安全评估核验、不良语料类型三个方面提出了重点要求&#xff0c;具体要求包括&#xff1a; 1、授权合法 语料的来源需要有合法的、明确的授权&#xff0c;确保其符合“授权、同意、告知”的合法性原则。根据语料…

汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析

汽车安全的三重防线&#xff1a;深入解析FuSa、SOTIF与网络安全技术 现代汽车已成为装有数千个传感器的移动计算机&#xff0c;安全挑战比传统车辆复杂百倍。 随着汽车智能化、网联化飞速发展&#xff0c;汽车电子电气架构已从简单的分布式控制系统演变为复杂的移动计算平台。现…

【云安全】以Aliyun为例聊云厂商服务常见利用手段

目录 OSS-bucket_policy_readable OSS-object_public_access OSS-bucket_object_traversal OSS-Special Bucket Policy OSS-unrestricted_file_upload OSS-object_acl_writable ECS-SSRF 云攻防场景下对云厂商服务的利用大同小异&#xff0c;下面以阿里云为例 其他如腾…

[MongoDB] 认识MongoDB以及在Windows和Linux上安装MongoDB

初次学习&#xff0c;如有错误还请指正 目录 MongoDB简介 体系结构 数据模型 MongoDB的特点 Windows中的安装 Linux系统中的安装启动和连接 MongoDB简介 MongoDB是一个开源、高性能、无模式的文档型数据库&#xff0c;当初的设计就是用于简化开发和方便扩展&#xff0c;…

iOS —— UI 初探

简介 第一次新建时&#xff0c;你可能会好奇。为什么有这么多文件&#xff0c;他们都有什么用&#xff1f; App 启动与生命周期管理相关 文件名 类型 作用 main.m m 程序入口&#xff0c;main() 函数定义在这里 AppDelegate.h/.m h/m App 启动/进入后台/退出等全局事…

【设计模式-3.4】结构型——代理模式

说明&#xff1a;说明&#xff1a;本文介绍结构型设计模式之一的代理模式 定义 代理模式&#xff08;Proxy Pattern&#xff09;指为其他对象提供一种代理&#xff0c;以控制对这个对象的访问&#xff0c;属于结构型设计模式。&#xff08;引自《设计模式就该这样学》P158&am…

C++: STL简介与string类核心技术解析及其模拟实现

目录: 一.STL二.string类一、创建对象的6种构造方式二、常用接口解析1. 容量操作2. 元素访问3. 修改操作4. 字符串操作 三.string模拟实现一、设计基础&#xff1a;类结构与资源管理二、拷贝控制&#xff1a;深拷贝的三种实现1. 传统深拷贝2. 现代写法&#xff08;推荐&#xf…

【复杂网络分析】什么是modularity?

在复杂网络研究中&#xff0c;modularity&#xff08;模块化程度或模块度&#xff09; 是衡量网络社区结构&#xff08;即节点分组为紧密连接的社区&#xff0c;而社区间连接稀疏&#xff09;的重要指标。它由Mark Newman和Michelle Girvan于2004年提出&#xff0c;广泛用于评估…

模型训练相关的问题

与模型训练相关问题 损失函数Cross entropy loss的含义训练数据有脏数据,怎么处理?loss一直不收敛,怎么排查?连续值的特征怎么处理后输入到机器学习模型当中损失函数Cross entropy loss的含义 在深度学习中,可以看作通过概率分布q ( x )(预测概率)表示概率分布p ( x ) …