目录

  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.pswp.cn/diannao/85630.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/85630.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/85630.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(11)java+ selenium->元素定位之By_tag_name

1.简介 继续WebDriver关于元素定位,这篇介绍By ClassName。tagName是DOM结构的一部分,其中页面上的每个元素都是通过输入标签,按钮标签或锚定标签等标签定义的。每个标签都具有多个属性,例如ID,名称,值类等。就其他定位符而言在Selenium中,我们使用了标签的这些属性值来…

2021 RoboCom 世界机器人开发者大赛-高职组(复赛)解题报告 | 珂学家

前言 题解 2021 RoboCom 世界机器人开发者大赛-高职组&#xff08;复赛&#xff09;解题报告。 模拟题为主&#xff0c;包含进制转换等等。 最后一题&#xff0c;是对向量/自定义类型&#xff0c;重定义小于操作符。 7-1 人工智能打招呼 分值: 15分 考察点: 分支判定&…

day42 简单CNN

目录 一、从图像分类任务谈起 二、CNN架构解剖实验室 2.1 卷积层&#xff1a;空间特征的魔法师 2.2 归一化层&#xff1a;加速收敛的隐形推手 2.3 激活函数&#xff1a;非线性的灵魂 三、工程实践避坑指南 3.1 数据增强工程 3.2 调度器工程实战 四、典型问题排查手册 …

Gitee Wiki:以知识管理赋能 DevSecOps,推动关键领域软件自主演进

关键领域软件研发中的知识管理困境 传统文档管理模式问题显著 关键领域软件研发领域&#xff0c;传统文档管理模式问题显著&#xff1a;文档存储无系统&#xff0c;查找困难&#xff0c;降低效率&#xff1b;更新不及时&#xff0c;与实际脱节&#xff0c;误导开发&#xff1…

清理 pycharm 无效解释器

1. 起因&#xff0c; 目的: 经常使用 pycharm 来调试深度学习项目&#xff0c;每次新建虚拟环境&#xff0c;都是显示一堆不存在的名称&#xff0c;删也删不掉。 总觉得很烦&#xff0c;是个痛点。决定深入研究一下。 2. 先看效果 效果是能行&#xff0c;而且清爽多了。 3. …

【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)

目录 1 准备工作&#xff1a;python库包安装1.1 安装必要库 案例说明&#xff1a;模拟视频帧的时序建模ConvLSTM概述损失函数说明&#xff08;python全代码&#xff09; 参考 ConvLSTM的原理说明可参见另一博客-【ConvLSTM第一期】ConvLSTM原理。 1 准备工作&#xff1a;pytho…

MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析

目录 一、DDL 基础概述 1.1 DDL 定义与作用 1.2 DDL 语句分类 1.3 数据类型与存储引擎 1.3.1 数据类型 1.3.2 存储引擎差异 二、基础 DDL 语句详解 2.1 创建数据库与表 2.1.1 创建数据库 2.1.2 创建表 2.2 修改表结构 2.2.1 添加列 2.2.2 修改列属性 2.2.3 删除列…

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个接口&#xff0c;用于创建一系列相关或依赖的对象&#xff0c;无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建&#xff0c;相比工厂方法模式&#xff0c;能创建一个产品族。该模…

Express教程【006】:使用Express写接口

文章目录 8、使用Express写接口8.1 创建API路由模块8.2 编写GET接口8.3 编写POST接口 8、使用Express写接口 8.1 创建API路由模块 1️⃣新建routes/apiRouter.js路由模块&#xff1a; /*** 路由模块*/ // 1-导入express const express require(express); // 2-创建路由对象…

【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二

App版本不升级时&#xff0c;又想即时更新本地数据库怎么办&#xff1f; 办法二&#xff1a;从服务器下载最新的sqlite数据替换掉本地的数据&#xff08;注意是数据不是文件&#xff09; 稍加调整&#xff0c; // &#xff01;&#xff01;&#xff01;注意&#xff01;&…

Mac电脑_钥匙串操作选项变灰的情况下如何删除?

Mac电脑_钥匙串操作选项变灰的情况下如何删除&#xff1f; 这时候 可以使用相关的终端命令进行操作。 下面附加文章《Mac电脑_钥匙串操作的终端命令》。 《Mac电脑_钥匙串操作的终端命令》 &#xff08;来源&#xff1a;百度~百度AI 发布时间&#xff1a;2025-06&#xff09;…

对接系统外部服务组件技术方案

概述 当前系统需与多个外部系统对接,然而外部系统稳定性存在不确定性。对接过程中若出现异常,需依靠双方的日志信息来定位问题,但若日志信息不够完整,会极大降低问题定位效率。此外,问题发生后,很大程度上依赖第三方的重试机制,若第三方缺乏完善的重试机制,就需要手动…

WAF绕过,网络层面后门分析,Windows/linux/数据库提权实验

一、WAF绕过文件上传漏洞 win7&#xff1a;10.0.0.168 思路&#xff1a;要想要绕过WAF&#xff0c;第一步是要根据上传的内容找出来被拦截的原因。对于文件上传有三个可以考虑的点&#xff1a;文件后缀名&#xff0c;文件内容&#xff0c;文件类型。 第二步是根据找出来的拦截原…

一文学会c++中的内存管理知识点

文章目录 c/c内存管理c语言动态内存管理c动态内存管理new/delete自定义类型妙用operator new和operator delete malloc/new&#xff0c;free/delete区别 c/c内存管理 int globalVar 1;static int staticGlobalVar 1;void Test(){static int staticVar 1;int localVar 1;in…

深入解析Linux死锁:原理、原因及解决方案

Linux死锁是系统资源管理的致命陷阱&#xff0c;平均每年导致全球数据中心约​​3.7亿小时​​的服务中断。本文深度剖析死锁形成的​​四个必要条件​​和六种典型死锁场景&#xff0c;结合Linux内核源码层级的资源管理机制&#xff0c;揭示文件系统锁、内存分配、多线程同步等…

SKUA-GOCAD入门教程-第八节 线的创建与编辑2

8.1.3根据线创建曲线 (1)从线生成线 这个命令可以将一组曲线合并为一条曲线。每个输入曲线都会成为新曲线内的一个部分。 1、选择 Curve commands > New > Curves 打开对话框。 图1 根据曲线创建曲线 在“name”框中

『uniapp』把接口的内容下载为txt本地保存 / 读取本地保存的txt文件内容(详细图文注释)

目录 预览效果思路分析downloadTxt 方法readTxt 方法 完整代码总结 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 欢迎关注 『uniapp』 专栏&#xff0c;持续更新中 预览效果 思路分析 downloadTxt 方法 该方法主要完成两个任务&#xff1a; 下载 txt 文件&#xff1a;通…

攻防世界-unseping

进入环境 在获得的场景中发现PHP代码并进行分析 编写PHP编码 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 将其传入 想执行ls&#xff0c;但是发现被过滤掉了 使用环境变量进行绕过 $a new…

IP查询与网络风险的关系

网络风险场景与IP查询的关联 网络攻击、恶意行为、数据泄露等风险事件频发&#xff0c;而IP地址作为网络设备的唯一标识&#xff0c;承载着关键线索。例如&#xff0c;在DDoS恶意行为中&#xff0c;攻击者利用大量IP地址发起流量洪泛&#xff1b;恶意行为通过变换IP地址绕过封…

pikachu通关教程-XSS

XSS XSS漏洞原理 XSS被称为跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;&#xff0c;由于和层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;重名&#xff0c;改为XSS。主要基于JavaScript语言进行恶意攻击&#xff0c;因为js非常灵活…