# supervisor **Repository Path**: yf33/supervisor ## Basic Information - **Project Name**: supervisor - **Description**: 一个基于 Python 实现的简单类似 supervisor 的服务管理工具,用于管理和监控后台服务。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-17 - **Last Updated**: 2026-02-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Simple Supervisor - 轻量级服务管理工具 一个基于 Python 实现的简单类似 supervisor 的服务管理工具,用于管理和监控后台服务。 ## 功能特性 - ✅ 服务添加/删除 - ✅ 服务启动/停止/重启 - ✅ 服务状态监控 - ✅ 日志查看 - ✅ 配置持久化(YAML) - ✅ 支持环境变量和工作目录配置 - ✅ 服务自动启动(系统重启后恢复) ## 安装 确保已安装 Python 3.6+ 和 PyYAML 库。 ```bash # 安装 PyYAML 依赖 pip3 install pyyaml # 设置执行权限 chmod +x supervisor.py ``` ## 快速开始 ### 1. 查看帮助 ```bash ./supervisor.py --help ``` ### 2. 查看服务状态 ```bash ./supervisor.py list # 或者 ./supervisor.py status ``` ### 3. 启动示例服务 ```bash ./supervisor.py start web_server ``` ### 4. 再次查看状态 ```bash ./supervisor.py list ``` ## 命令详解 ### 添加服务 (add) 添加一个新服务到配置中。 ```bash ./supervisor.py add [选项] <服务名> ``` **选项:** - `--cmd <命令>, -c <命令>` - 要执行的命令(必需) - `--dir <目录>` - 服务的工作目录 - `--env KEY=VALUE` - 环境变量(可多次使用) - `--port <端口>, -p <端口>` - 服务占用的端口号 **示例:** ```bash # 添加一个简单的 HTTP 服务 ./supervisor.py add --port 8080 --cmd "python3 -m http.server 8080" --dir /var/www my_web # 添加带环境变量的服务 ./supervisor.py add --port 3000 --cmd "node server.js" --dir /opt/api --env PORT=3000 --env NODE_ENV=production api_server # 你最初的命令(已修复) ./supervisor.py add --port 8000 --dir ~/git/app/tupian01 --env PY_ENV=production --cmd "./viewer.py" tupian ``` ### 启动服务 (start) 启动已配置的服务。 ```bash ./supervisor.py start <服务名> ``` **示例:** ```bash ./supervisor.py start web_server ``` ### 停止服务 (stop) 停止正在运行的服务。 ```bash ./supervisor.py stop <服务名> ``` **示例:** ```bash ./supervisor.py stop web_server ``` ### 重启服务 (restart) 重启服务(先停止再启动)。 ```bash ./supervisor.py restart <服务名> ``` **示例:** ```bash ./supervisor.py restart web_server ``` ### 查看/列出服务 (status/list) 查看所有服务的状态。 ```bash ./supervisor.py status # 或者 ./supervisor.py list ``` **输出示例:** ``` # Service Name Status Auto Port PID Start Time Created Time -------------------------------------------------------------------------------------------------------------------------------------------- 1 tupian running yes 8000 12345 2026-02-17 10:30:00 20分钟前 2 web_server stopped yes 8080 - - 2小时前 ``` **说明:** - `Start Time` - 服务最后一次启动的时间 - `Created Time` - 服务添加/创建到现在的时间(相对时间格式) **通过序号操作:** 所有需要服务名作为参数的命令都支持使用序号(第 1 列的数字): ```bash # 启动第 2 个服务 ./supervisor.py start 2 # 停止第 1 个服务 ./supervisor.py stop 1 # 重启第 2 个服务 ./supervisor.py restart 2 # 启用第 2 个服务自动启动 ./supervisor.py enable 2 # 禁用第 1 个服务自动启动 ./supervisor.py disable 1 # 查看第 1 个服务的日志 ./supervisor.py logs 1 # 删除第 2 个服务 ./supervisor.py remove 2 ``` ### 查看日志 (logs) 查看服务的标准输出和标准错误日志。 ```bash ./supervisor.py logs <服务名> ``` **示例:** ```bash ./supervisor.py logs web_server ``` ### 删除服务 (remove/del) 从配置中删除服务(如果服务正在运行会先停止)。 ```bash ./supervisor.py remove <服务名> # 或者 ./supervisor.py del <服务名> ``` **示例:** ```bash ./supervisor.py remove web_server ./supervisor.py del web_server ``` ### 启用自动启动 (enable) 启用服务的自动启动功能。 ```bash ./supervisor.py enable <服务名> ``` **示例:** ```bash ./supervisor.py enable tupian ``` ### 禁用自动启动 (disable) 禁用服务的自动启动功能。 ```bash ./supervisor.py disable <服务名> ``` **示例:** ```bash ./supervisor.py disable tupian ``` ### 自动启动所有服务 (auto-start) 启动所有启用了自动启动且当前未运行的服务(建议在系统重启后执行此命令)。 ```bash ./supervisor.py auto-start ``` ## 配置文件 配置文件默认为 `config.yaml`,位于当前目录。 ### 配置文件格式 ```yaml services: 服务名: command: "执行命令" directory: "工作目录" environment: 环境变量名: "环境变量值" auto_start: true # 是否自动启动 ``` ### 手动编辑配置 你也可以直接编辑 `config.yaml` 文件来管理服务配置,修改后工具会自动加载新配置。 ## 使用示例 ### 示例 1: 管理一个 Python Web 服务 ```bash # 添加服务 ./supervisor.py add web_app "python3 app.py" --dir /home/user/webapp --env DEBUG=true # 启动服务 ./supervisor.py start web_app # 查看状态 ./supervisor.py status # 查看日志 ./supervisor.py logs web_app # 重启服务 ./supervisor.py restart web_app # 停止服务 ./supervisor.py stop web_app ``` ### 示例 2: 管理多个服务 ```bash # 添加服务 1 ./supervisor.py add nginx "nginx -g 'daemon off;'" --dir /etc/nginx # 添加服务 2 ./supervisor.py add redis "redis-server" --dir /var/lib/redis # 启动所有服务 ./supervisor.py start nginx ./supervisor.py start redis # 查看所有服务状态 ./supervisor.py status ``` ## 注意事项 1. 服务进程的生命周期:服务停止时,会先尝试优雅终止(SIGTERM),5秒后强制杀死(SIGKILL) 2. 日志会保留在内存中,重启工具后历史日志会丢失 3. 建议为每个服务设置合适的工作目录 4. 配置文件会在每次添加/删除服务时自动保存 ## 系统重启后自动启动服务 要让服务在系统重启后自动恢复,我们提供了简单的命令来管理! ### 第一步:启用需要自动启动的服务 ```bash # 启用服务的自动启动 ./supervisor.py enable tupian ./supervisor.py enable web_server ``` ### 第二步:安装启动项(macOS) ```bash ./supervisor.py install-launchd ``` 这会: 1. 复制 plist 配置文件到 `~/Library/LaunchAgents/` 2. 系统启动时自动执行 `supervisor.py auto-start` 3. 自动拉起所有 `auto_start = true` 的服务 ### 第三步:卸载启动项(如果需要) ```bash ./supervisor.py uninstall-launchd ``` ### 方法 2: 使用 crontab(通用) ```bash # 编辑 crontab crontab -e # 添加以下行(将路径替换为你的 supervisor.py 实际路径) @reboot /usr/bin/python3 /Users/yang/git/app/supervisor/supervisor.py auto-start ``` ## 项目结构 ``` supervisor/ ├── supervisor.py # 主程序 ├── config.yaml # 配置文件 └── README.md # 使用说明 ``` ## 许可证 MIT License