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

四种Linux进程管理工具使用详解

目录

1. Circus-基于Python的进程管理工具

1.1 服务安装

1.2 配置文件示例

1.3 启动与基本操作

1.3.1 启动 Circus 主进程

1.3.2 通过 circusctl 管理进程

1.3.3 访问 Web 监控界面

1.4 常用命令

2. Daemontools

2.1 软件安装

2.2 基本使用流程

2.3 Daemontools-Encore(Daemontools的增强版)

2.3.1 安装Daemontools-Encore:

2.3.2 Daemontools使用案例:监控Zookeeper

run内容

2.3.3 启动服务

2.3.4 验证是否成功

3. PM2-Node.js 应用专用的进程管理器

3.1 安装npm

3.2 基本使用

3.3 配置文件管理

3.4 开机自启配置

4. Supervisor

4.1 安装 Supervisor​

4.2 配置文件结构​

4.3 配置一个被管理的进程​

4.4 常用操作命令

4.5 配置修改后的标准流程

4.6 高级用法

4.6.1 ​​进程分组 (Group)​​

4.6.2 启用 Web 管理界面​​


1. Circus-基于Python的进程管理工具

Circus 是一款基于 Python 开发的跨语言进程管理工具,专注于监控、管理和编排多个进程(支持 Python、Node.js、Java、Go 等任意语言的应用)。它提供了命令行接口、Web 监控界面和灵活的配置方式,适合在开发或生产环境中管理多个后台进程(如 API 服务、Worker 进程、定时任务等)。

1.1 服务安装

#安装
pip install circus#(可选)安装 Web 界面依赖(默认已包含)
pip install circus[web]  # 确保 Web 监控功能可用

1.2 配置文件示例

Circus 主要通过配置文件(支持 INI、YAML 格式)定义进程。以下是一个 INI 格式的示例(config.ini):

[circus]
# 主进程配置:日志文件、检查间隔(秒)
logfile = /var/log/circus/circusd.log
check_delay = 5  # 进程状态检查间隔[watcher:api-server]
# 定义一个名为 api-server 的进程组
cmd = /usr/bin/node /opt/app/server.js  # 启动命令(Node.js 应用)
numprocesses = 4  # 启动 4 个实例(利用多核)
autostart = true  # 随 circusd 自动启动
autorestart = true  # 进程退出时自动重启
working_dir = /opt/app  # 工作目录
env = NODE_ENV=production,PORT=8000  # 环境变量
stdout_stream.class = FileStream  # 标准输出日志配置
stdout_stream.filename = /var/log/circus/api-stdout.log
stdout_stream.max_bytes = 10485760  # 日志轮转(10MB)
stdout_stream.backup_count = 5  # 保留 5 个备份
stderr_stream.class = FileStream  # 标准错误日志配置
stderr_stream.filename = /var/log/circus/api-stderr.log[watcher:worker]
# 定义第二个进程组(Python 脚本)
cmd = /usr/bin/python /opt/app/worker.py
numprocesses = 2  # 2 个实例
autostart = true
autorestart = unexpected  # 仅意外退出时重启[plugin:web]
# 启用 Web 监控插件
use = circus.plugins.web  # 加载 Web 插件
host = 0.0.0.0  # 监听地址(允许外部访问)
port = 8080  # Web 端口

1.3 启动与基本操作

1.3.1 启动 Circus 主进程

circusd --daemon config.ini  # 后台启动(--daemon 可选)

1.3.2 通过 circusctl 管理进程

# 连接到 circusd(默认地址 localhost:5555)
circusctl# 常用命令(在 circusctl 交互界面或直接执行)
circusctl status               # 查看所有进程状态
circusctl start api-server     # 启动 api-server 进程组
circusctl stop worker          # 停止 worker 进程组
circusctl restart api-server:2 # 重启 api-server 的第 2 个实例
circusctl scale api-server=6   # 动态调整 api-server 实例数为 6 个
circusctl reloadconfig         # 重新加载配置文件(不中断服务)
circusctl quit                 # 停止 circusd 及所有管理的进程

1.3.3 访问 Web 监控界面

启动后,通过 http://服务器IP:8080 访问 Web 界面,可查看进程列表、资源占用(CPU / 内存)、日志等实时信息。

1.4 常用命令

命令说明
circusctl status查看所有进程状态
circusctl restart myapp重启指定进程
circusctl stop myapp停止指定进程
circusctl add myapp /path/to/app.py添加新应用
circusctl list列出所有管理的进程

2. Daemontools

2.1 软件安装

# 创建安装目录
mkdir /package
chmod 755 /package# 下载并解压源码
cd /package
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
tar zxf daemontools-0.76.tar.gz# 编译并安装
cd admin/daemontools-0.76
vim src/error.h  # 修改:将extern int errno; 改为#include <errno.h>
package/install

2.2 基本使用流程

# 创建服务目录
cd /service
mkdir mydaemon# 创建run脚本(启动服务的命令)
cd mydaemon
vim run
chmod 755 run

run脚本内容示例:

#!/bin/bash
exec 2>&1
exec /path/to/your/service
# 启动服务
supervise /service/mydaemon# 查看服务状态
svstat /service/mydaemon

2.3 Daemontools-Encore(Daemontools的增强版)

Daemontools-Encore是Daemontools的增强版本,由Bruce G. Miller开发,提供了更易用的安装和管理方式。

2.3.1 安装Daemontools-Encore

git clone https://github.com/bruceg/daemontools-encore.git
cd daemontools-encore
make
make install

2.3.2 Daemontools使用案例:监控Zookeeper

# 创建服务目录
cd /service
mkdir zookeeper
cd zookeeper# 创建run脚本
vim run
chmod 755 run

run内容

#!/bin/bash
exec 2>&1
exec /mnt/zk/zookeeper-3.4.4/bin/zkServer.sh start

2.3.3 启动服务

supervise /service/zookeeper

2.3.4 验证是否成功

# 终止zookeeper进程
killall -9 zookeeper# 检查是否自动重启
ps -aux | grep zookeeper

3. PM2-Node.js 应用专用的进程管理器

PM2(Process Manager 2)是一个Node.js 应用专用的进程管理器,但也支持 Python、Ruby、PHP 等其他语言的应用。它由 Node.js 开发,提供进程启动、停止、重启、负载均衡、日志管理、监控等功能,是 Node.js 生产环境的常用工具。

3.1 安装npm

# 使用 npm 安装
npm install pm2 -g# 使用 yarn 安装
yarn global add pm2# 更新 pm2
pm2 update

3.2 基本使用

# 启动应用
pm2 start app.js
pm2 start app.js --name "my-app"# 管理进程
pm2 stop my-app
pm2 restart my-app
pm2 reload my-app    # 零停机重载
pm2 delete my-app# 查看状态
pm2 status
pm2 show my-app
pm2 monit           # 实时监控# 日志管理
pm2 logs
pm2 logs my-app
pm2 flush           # 清空日志

3.3 配置文件管理

对于多应用或复杂配置,推荐使用 ecosystem.config.js 配置文件(支持 JSON/YAML 格式):

创建配置文件

pm2 init

编辑配置(示例):

module.exports = {apps: [{name: "api-server",  // 进程名script: "./server.js",  // 启动脚本instances: "max",  // 集群模式,进程数=CPU核心exec_mode: "cluster",  // 集群模式(默认fork)env: {NODE_ENV: "production",  // 环境变量},log_date_format: "YYYY-MM-DD HH:mm:ss",  // 日志时间格式merge_logs: true,  // 合并集群日志autorestart: true,  // 崩溃后自动重启watch: false,  // 禁用文件监听(生产环境推荐)}]
};

通过配置文件启动:

pm2 start ecosystem.config.js

3.4 开机自启配置

PM2 可通过 startup 命令生成系统自启脚本(兼容 systemd、sysvinit、upstart 等):

生成自启脚本

pm2 startup  # 按提示执行输出的命令(需sudo权限)

保存当前进程列表(确保重启后恢复):

pm2 save

取消自启:

pm2 unstartup

4. Supervisor

Supervisor 是一个用 Python 编写的进程管理工具,专为类 Unix 系统设计。它的核心作用是​​将普通命令行进程变为后台守护进程(daemon)并进行监控​​,在进程异常退出时能自动重启,确保服务持续运行。

4.1 安装 Supervisor​

# Ubuntu/Debian
sudo apt-get install supervisor# CentOS/RHEL (需要先安装EPEL仓库)
sudo yum install epel-release
sudo yum install supervisor# 通过pip安装(通用方法)
sudo pip install supervisor

4.2 配置文件结构​

Supervisor 的配置主要分为两部分:

  • 主配置文件​​:通常位于 /etc/supervisor/supervisord.conf或 /etc/supervisord.conf。它定义了 supervisord本身的全局设置。
  • 进程配置文件​​:推荐在 /etc/supervisor/conf.d/目录下为每个进程创建独立的 .conf文件。主配置文件中的 [include]部分通常会包含这些文件,例如 files = /etc/supervisor/conf.d/*.conf。

4.3 配置一个被管理的进程​

在 /etc/supervisor/conf.d/目录下创建一个配置文件(如 my_app.conf),内容示例

[program:my_app] ; 进程名称,必须唯一
command=/usr/bin/python3 /path/to/your/app.py ; 要执行的启动命令
directory=/path/to/your/app ; 命令执行前切换到的工作目录
autostart=true ; 是否随 supervisord 启动而自动启动
autorestart=true ; 进程退出后是否自动重启,可选 true(总是)、false(从不)、unexpected(仅意外退出时)
startsecs=5 ; 进程持续运行多少秒后才认为是启动成功
startretries=3 ; 启动失败后的重试次数
user=www-data ; 以哪个用户身份运行进程
stdout_logfile=/var/log/my_app.log ; 标准输出日志路径
stdout_logfile_maxbytes=50MB ; 单个日志文件最大大小
stdout_logfile_backups=10 ; 日志备份数量
redirect_stderr=true ; 是否将标准错误输出重定向到标准输出
environment=ENV_VAR="value",ANOTHER_VAR="value2" ; 设置环境变量

4.4 常用操作命令

使用 supervisorctl命令来管理:

命令

作用

sudo supervisorctl status

​查看所有进程的状态​

sudo supervisorctl start <program_name>

启动某个进程

sudo supervisorctl stop <program_name>

停止某个进程

sudo supervisorctl restart <program_name>

重启某个进程

sudo supervisorctl reload

重新加载配置文件(不影响已运行进程)

sudo supervisorctl update

​重新加载配置,并启动有变动的进程​​(常用)

sudo supervisorctl tail <program_name>

查看某个进程的日志输出

4.5 配置修改后的标准流程

sudo supervisorctl reread  # 重新读取配置,确认语法无误
sudo supervisorctl update  # 使新配置生效,会重启配置有变动的进程

4.6 高级用法

4.6.1 ​​进程分组 (Group)​

可以将多个相关的程序放入一个组进行统一管理。

[group:my_services]
programs=my_app,celery_worker,another_service ; 逗号分隔的程序名

然后可以操作整个组:

sudo supervisorctl stop my_services:  # 停止组内所有进程
sudo supervisorctl start my_services: # 启动组内所有进程

4.6.2 启用 Web 管理界面​

在主配置文件 (/etc/supervisor/supervisord.conf) 中取消注释或添加 [inet_http_server]部分:

[inet_http_server]
port=127.0.0.1:9001 ; Web界面监听端口,设为*:9001可允许外部访问
username=your_username ; 用户名(建议设置)
password=your_password ; 密码(建议设置强密码)

重启 supervisord后,即可通过浏览器访问 http://your-server-ip:9001进行监控和管理。

http://www.dtcms.com/a/399418.html

相关文章:

  • 软件的自动化测试平台
  • 分享天气预报走势图和未来7日预报静态HTML
  • 如何建立国际网站网站建设现状调查研究
  • JVM(六)-- StringTable
  • SpringBoot面试
  • 网站建设技术课程设计报告保定市网站制作公司
  • 如何处理JavaScript渲染的登录页面?Selenium自动化登录指南
  • 知识图谱对自然语言处理中深层语义分析的影响与启示
  • 齐齐哈尔企业网站排名优化网站建设设计制作熊掌号
  • 52Hz——FreeRTOS学习笔记——调度器的挂起与恢复
  • 微信网站建设平台郑州全面恢复正常
  • 8.Spring Ai Alibaba招聘助手实战
  • 平凉网站建设平凉杭州电信网站备案
  • 从GitHub下载单个文件夹的完整指南
  • 第二课强登陆网站新型智库建设的意见OA网站建设分析
  • Dify本地化部署和应用
  • 公司网站怎么做才能有官网二字做外贸网站那个平台好
  • linux docker 数据迁移
  • 自动点击器助手 1.1.5 | 支持免root录制点击脚本,一键录制重复点击脚本
  • qwen2.5-vl多模态大模型详解
  • 如何做好一个网站深圳网站和app建设
  • Linux进程概念(1)
  • w32time 服务
  • 视频解析网站怎么做的wordpress阿里云卡死了
  • 审美积累,顶刊论文插图原理图、流程图
  • 网站开发上市公司做彩票网站犯法不
  • python+django/flask在线问诊系统 医院就诊 医生推荐系统
  • 【Qt】QButtonGroup、QToolButton、QStackedWidget的常用用法
  • QT:串口通信、串口发送与接收(2)
  • 【Unity 入门教程】一、前置工作