vibe-coding-cn/prompts/coding_prompts/sh控制面板生成.md

998 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 生产级 Shell 控制面板生成规格说明
> **用途**: 本文档作为提示词模板,用于指导 AI 生成符合生产标准的 Shell 交互式控制面板。
>
> **使用方法**: 将本文档内容作为提示词提供给 AIAI 将基于此规格生成完整的控制面板脚本。
---
## 📋 项目需求概述
请生成一个生产级的 Shell 交互式控制面板脚本,用于管理和控制复杂的软件系统。该控制面板必须满足以下要求:
### 核心目标
1. **自动化程度高** - 首次运行自动配置所有依赖和环境,后续运行智能检查、按需安装,而不是每次都安装,只有缺失或者没有安装的时候才安装
2. **生产就绪** - 可直接用于生产环境,无需手动干预
3. **双模式运行** - 支持交互式菜单和命令行直接调用
4. **高可维护性** - 模块化设计,易于扩展和维护
5. **自修复能力** - 自动检测并修复常见问题
### 技术要求
- **语言**: Bash Shell (兼容 bash 4.0+)
- **依赖**: 自动检测和安装Python3, pip, curl, git
- **平台**: Ubuntu/Debian, CentOS/RHEL, macOS
- **文件数量**: 单文件实现
- **执行模式**: 幂等设计,可重复执行
---
## 🏗️ 架构设计5 层核心功能
### Layer 1: 环境检测与自动安装模块
**功能需求**:
```yaml
requirements:
os_detection:
- 自动识别操作系统类型 (Ubuntu/Debian/CentOS/RHEL/macOS)
- 识别系统版本号
- 识别包管理器 (apt-get/yum/dnf/brew)
dependency_check:
- 检查必需依赖: python3, pip3, curl
- 检查推荐依赖: git
- 返回缺失依赖列表
auto_install:
- 提示用户确认安装(交互模式)
- 静默自动安装(--force 模式)
- 调用对应包管理器安装
- 安装失败时提供明确错误信息
venv_management:
- 检测虚拟环境是否存在
- 不存在则创建 .venv/
- 自动激活虚拟环境
- 检查 pip 版本,仅在过旧时升级
- 检查 requirements.txt 依赖是否已安装
- 仅在缺失或版本不匹配时安装依赖
- 所有检查通过则跳过安装,直接进入下一步
```
**关键函数**:
```bash
detect_environment() # 检测 OS 和包管理器
command_exists() # 检查命令是否存在
check_system_dependencies() # 检查系统依赖
auto_install_dependency() # 自动安装缺失依赖
setup_venv() # 配置 Python 虚拟环境
check_venv_exists() # 检查虚拟环境是否存在
check_pip_requirements() # 检查 requirements.txt 依赖是否满足
verify_dependencies() # 验证所有依赖完整性,仅缺失时触发安装
```
**实现要点**:
- 使用 `/etc/os-release` 检测 Linux 发行版
- 使用 `uname` 检测 macOS
- **智能检查优先**:每次启动前先验证环境和依赖,仅在检测到缺失或版本不符时才执行安装,每次启动前先验证环境和依赖,仅在检测到缺失或版本不符时才执行安装,每次启动前先验证环境和依赖,仅在检测到缺失或版本不符时才执行安装
- **幂等性保证**:重复运行不会重复安装已存在的依赖,避免不必要的时间消耗
- 优雅降级:无法安装时给出手动安装指令
- 支持离线环境检测(跳过自动安装)
---
### Layer 2: 初始化与自修复机制
**功能需求**:
```yaml
requirements:
directory_management:
- 检查必需目录: data/, logs/, modules/, pids/
- 缺失时自动创建
- 设置正确的权限 (755)
pid_cleanup:
- 扫描所有 .pid 文件
- 检查进程是否存活 (kill -0)
- 清理僵尸 PID 文件
- 记录清理日志
permission_check:
- 验证关键目录的写权限
- 验证脚本自身的执行权限
- 权限不足时给出明确提示
config_validation:
- 检查 .env 文件存在性
- 验证必需的环境变量
- 缺失时从模板创建或提示用户
safe_mode:
- 初始化失败时进入安全模式
- 只启动基础功能
- 提供修复建议
```
**关键函数**:
```bash
init_system() # 系统初始化总入口
init_directories() # 创建目录结构
clean_stale_pids() # 清理过期 PID
check_permissions() # 权限检查
validate_config() # 配置验证
enter_safe_mode() # 安全模式
```
**实现要点**:
- 使用 `mkdir -p` 确保父目录存在
- 使用 `kill -0 $pid` 检查进程存活
- 所有操作都要有错误处理
- 记录所有自动修复的操作
---
### Layer 3: 参数化启动与非交互模式
**功能需求**:
```yaml
requirements:
command_line_args:
options:
- name: --silent / -s
description: 静默模式,无交互提示
effect: SILENT=1
- name: --force / -f
description: 强制执行,自动确认
effect: FORCE=1
- name: --no-banner
description: 不显示 Banner
effect: NO_BANNER=1
- name: --debug / -d
description: 显示调试信息
effect: DEBUG=1
- name: --help / -h
description: 显示帮助信息
effect: print_usage && exit 0
commands:
- start: 启动服务
- stop: 停止服务
- restart: 重启服务
- status: 显示状态
- logs: 查看日志
- diagnose: 系统诊断
execution_modes:
interactive:
- 显示彩色菜单
- 等待用户输入
- 操作后按回车继续
non_interactive:
- 直接执行命令
- 最小化输出
- 返回明确的退出码 (0=成功, 1=失败)
exit_codes:
- 0: 成功
- 1: 一般错误
- 2: 参数错误
- 3: 依赖缺失
- 4: 权限不足
```
**关键函数**:
```bash
parse_arguments() # 解析命令行参数
print_usage() # 显示帮助信息
execute_command() # 执行非交互命令
interactive_mode() # 交互式菜单
```
**实现要点**:
- 使用 `getopts` 或手动 `while [[ $# -gt 0 ]]` 解析参数
- 参数和命令分离处理
- 非交互模式禁用所有 `read` 操作
- 明确的退出码便于 CI/CD 判断
**CI/CD 集成示例**:
```bash
# GitHub Actions
./control.sh start --silent --force || exit 1
# Crontab
0 2 * * * cd /path && ./control.sh restart --silent
# Systemd
ExecStart=/path/control.sh start --silent
```
---
### Layer 4: 模块化插件系统
**功能需求**:
```yaml
requirements:
plugin_structure:
directory: modules/
naming: *.sh
loading: 自动扫描并 source
plugin_interface:
initialization:
- 函数名: ${MODULE_NAME}_init()
- 调用时机: 模块加载后立即执行
- 用途: 注册命令、验证依赖
cleanup:
- 函数名: ${MODULE_NAME}_cleanup()
- 调用时机: 脚本退出前
- 用途: 清理资源、保存状态
plugin_registry:
- 维护已加载模块列表: LOADED_MODULES
- 支持模块查询: list_modules()
- 支持模块启用/禁用
plugin_dependencies:
- 模块可声明依赖: REQUIRES=("curl" "jq")
- 加载前检查依赖
- 依赖缺失时跳过并警告
```
**关键函数**:
```bash
load_modules() # 扫描并加载模块
register_module() # 注册模块信息
check_module_deps() # 检查模块依赖
list_modules() # 列出已加载模块
```
**模块模板**:
```bash
#!/bin/bash
# modules/example.sh
MODULE_NAME="example"
REQUIRES=("curl")
example_init() {
log_info "Example module loaded"
register_command "backup" "backup_database"
}
backup_database() {
log_info "Backing up database..."
# 实现逻辑
}
example_init
```
**实现要点**:
- 使用 `for module in modules/*.sh` 扫描
- 使用 `source $module` 加载
- 加载失败不影响主程序
- 支持模块间通信(通过全局变量或函数)
---
### Layer 5: 监控、日志与诊断系统
**功能需求**:
```yaml
requirements:
logging_system:
levels:
- INFO: 一般信息(青色)
- SUCCESS: 成功操作(绿色)
- WARN: 警告信息(黄色)
- ERROR: 错误信息(红色)
- DEBUG: 调试信息(蓝色,需开启 --debug
output:
console:
- 彩色输出(交互模式)
- 纯文本(非交互模式)
- 可通过 --silent 禁用
file:
- 路径: logs/control.log
- 格式: "时间戳 [级别] 消息"
- 自动追加,不覆盖
rotation:
- 检测日志大小
- 超过阈值时轮转 (默认 10MB)
- 保留格式: logfile.log.1, logfile.log.2
- 可配置保留数量
process_monitoring:
metrics:
- PID: 进程 ID
- CPU: CPU 使用率 (%)
- Memory: 内存使用率 (%)
- Uptime: 运行时长
collection:
- 使用 ps 命令采集
- 格式化输出
- 支持多进程监控
system_diagnostics:
collect_info:
- 操作系统信息
- Python 版本
- 磁盘使用情况
- 目录状态
- 最近日志 (tail -n 10)
- 进程状态
health_check:
- 检查服务是否运行
- 检查关键文件存在性
- 检查磁盘空间
- 检查内存使用
- 返回健康状态和问题列表
```
**关键函数**:
```bash
# 日志函数
log_info() # 信息日志
log_success() # 成功日志
log_warn() # 警告日志
log_error() # 错误日志
log_debug() # 调试日志
log_message() # 底层日志函数
# 日志管理
rotate_logs() # 日志轮转
clean_old_logs() # 清理旧日志
# 进程监控
get_process_info() # 获取进程信息
monitor_process() # 持续监控进程
check_process_health() # 健康检查
# 系统诊断
diagnose_system() # 完整诊断
collect_system_info() # 收集系统信息
generate_diagnostic_report() # 生成诊断报告
```
**实现要点**:
- ANSI 颜色码定义为常量
- 使用 `tee -a` 同时输出到控制台和文件
- `ps -p $pid -o %cpu=,%mem=,etime=` 获取进程信息
- 诊断信息输出为结构化格式
---
## 🎨 用户界面设计
### Banner 设计
```yaml
requirements:
ascii_art:
- 使用 ASCII 字符绘制
- 宽度不超过 80 字符
- 包含项目名称
- 可选版本号
color_scheme:
- 主色调: 青色 (CYAN)
- 强调色: 绿色 (GREEN)
- 警告色: 黄色 (YELLOW)
- 错误色: 红色 (RED)
toggle:
- 支持 --no-banner 禁用
- 非交互模式自动禁用
```
**示例**:
```
╔══════════════════════════════════════════════╗
║ Enhanced Control Panel v2.0 ║
╚══════════════════════════════════════════════╝
```
### 菜单设计
```yaml
requirements:
layout:
- 清晰的分隔线
- 数字编号选项
- 彩色标识(绿色数字,白色文字)
- 退出选项用红色
structure:
main_menu:
- 标题: "Main Menu" 或中文
- 功能选项: 1-9
- 退出选项: 0
sub_menu:
- 返回主菜单: 0
- 面包屑导航: 显示当前位置
interaction:
- read -p "选择: " choice
- 无效输入提示
- 操作完成后 "按回车继续..."
```
**示例**:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1) Start Service
2) Stop Service
3) Show Status
0) Exit
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
---
## 🔧 服务管理功能
### 核心操作
```yaml
requirements:
start_service:
process:
- 检查服务是否已运行
- 已运行则提示并退出
- 启动后台进程 (nohup ... &)
- 保存 PID 到文件
- 验证启动成功
- 输出日志路径
error_handling:
- 启动失败时清理 PID 文件
- 记录错误日志
- 返回非零退出码
stop_service:
process:
- 读取 PID 文件
- 检查进程是否存在
- 发送 SIGTERM 信号
- 等待进程退出 (最多 30 秒)
- 超时则发送 SIGKILL
- 删除 PID 文件
error_handling:
- PID 文件不存在时提示
- 进程已死但 PID 存在时清理
restart_service:
process:
- 调用 stop_service
- 等待 1-2 秒
- 调用 start_service
status_check:
display:
- 服务状态: Running/Stopped
- PID (如果运行)
- CPU 使用率
- 内存使用率
- 运行时长
- 日志文件大小
- 最后一次启动时间
```
### PID 文件管理
```yaml
requirements:
location: data/ 或 pids/
naming: service_name.pid
content: 单行纯数字 (进程 ID)
operations:
create:
- echo $! > "$PID_FILE"
- 立即刷新到磁盘
read:
- pid=$(cat "$PID_FILE")
- 验证是否为数字
check:
- kill -0 "$pid" 2>/dev/null
- 返回 0 表示进程存活
cleanup:
- rm -f "$PID_FILE"
- 记录清理日志
```
---
## 📂 项目结构规范
```yaml
project_root/
control.sh # 主控制脚本(本脚本)
modules/ # 可选插件目录
database.sh # 数据库管理模块
backup.sh # 备份模块
monitoring.sh # 监控模块
data/ # 数据目录
*.pid # PID 文件
*.db # 数据库文件
logs/ # 日志目录
control.log # 控制面板日志
service.log # 服务日志
.venv/ # Python 虚拟环境(自动创建)
requirements.txt # Python 依赖(如需要)
.env # 环境变量(如需要)
```
---
## 📝 代码规范与质量要求
### Shell 编码规范
```yaml
requirements:
shebang: "#!/bin/bash"
strict_mode:
- set -e: 遇到错误立即退出
- set -u: 使用未定义变量报错
- set -o pipefail: 管道中任何命令失败则失败
- 写法: set -euo pipefail
constants:
- 全大写: RED, GREEN, CYAN
- readonly 修饰: readonly RED='\033[0;31m'
variables:
- 局部变量: local var_name
- 全局变量: GLOBAL_VAR_NAME
- 引用: "${var_name}" (总是加引号)
functions:
- 命名: snake_case
- 声明: function_name() { ... }
- 返回值: return 0/1 或 echo result
comments:
- 每个函数前注释功能
- 复杂逻辑添加行内注释
- 分隔符: # ===== Section =====
```
### 错误处理
```yaml
requirements:
command_check:
- if ! command_exists python3; then
- command -v cmd &> /dev/null
file_check:
- if [ -f "$file" ]; then
- if [ -d "$dir" ]; then
error_exit:
- log_error "Error message"
- exit 1 或 return 1
trap_signals:
- trap cleanup_function EXIT
- trap handle_sigint SIGINT
- 确保资源清理
```
### 性能优化
```yaml
requirements:
avoid_subshells:
- 优先使用 bash 内建命令
- 避免不必要的 | 管道
cache_results:
- 重复使用的值存储到变量
- 避免重复调用外部命令
parallel_execution:
- 独立任务使用 & 并行
- 使用 wait 等待完成
```
---
## 🧪 测试要求
### 手动测试清单
```yaml
test_cases:
initialization:
- [ ] 首次运行自动创建目录
- [ ] 首次运行自动安装依赖
- [ ] 首次运行创建虚拟环境
- [ ] 重复运行不重复初始化(幂等性)
- [ ] 环境已存在时跳过创建,直接检查完整性
- [ ] 依赖已安装时跳过安装,仅验证版本
- [ ] 启动速度:二次启动明显快于首次(无重复安装)
interactive_mode:
- [ ] Banner 正常显示
- [ ] 菜单选项正确
- [ ] 无效输入有提示
- [ ] 每个菜单项都能执行
non_interactive_mode:
- [ ] ./control.sh start --silent 成功启动
- [ ] ./control.sh stop --silent 成功停止
- [ ] ./control.sh status 正确显示状态
- [ ] 错误返回非零退出码
service_management:
- [ ] 启动服务创建 PID 文件
- [ ] 停止服务删除 PID 文件
- [ ] 重启服务正常工作
- [ ] 状态显示准确
self_repair:
- [ ] 删除目录后自动重建
- [ ] 手动创建僵尸 PID 后自动清理
- [ ] 权限不足时有明确提示
module_system:
- [ ] 创建 modules/ 目录
- [ ] 放入测试模块能自动加载
- [ ] 模块函数可以调用
logging:
- [ ] 日志文件正常创建
- [ ] 日志包含时间戳和级别
- [ ] 彩色输出正常显示
- [ ] 日志轮转功能正常
edge_cases:
- [ ] 无 sudo 权限时依赖检查跳过
- [ ] Python 已安装时跳过安装
- [ ] 虚拟环境已存在时不重建
- [ ] 服务已运行时不重复启动
- [ ] requirements.txt 依赖已满足时不执行 pip install
- [ ] pip 版本已是最新时不执行升级
- [ ] 部分依赖缺失时仅安装缺失部分,不重装全部
```
---
## 🎯 代码生成要求
### 输出格式
生成的脚本应该:
1. **单文件**: 所有代码在一个 .sh 文件中
2. **完整性**: 可以直接运行,无需额外文件
3. **注释**: 关键部分有清晰注释
4. **结构**: 使用注释分隔各个层级
5. **定制区**: 标注 `👇 在这里添加你的逻辑` 供用户定制
### 代码结构模板
```bash
#!/bin/bash
# ==============================================================================
# 项目名称控制面板
# ==============================================================================
set -euo pipefail
# ==============================================================================
# LAYER 1: 环境检测与智能安装(按需安装,避免重复)
# ==============================================================================
# 颜色定义
readonly RED='\033[0;31m'
# ... 其他颜色
# 路径定义
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# ... 其他路径
# 环境检测函数
detect_environment() { ... }
check_system_dependencies() { ... }
check_venv_exists() { ... } # 检查虚拟环境是否存在
verify_dependencies() { ... } # 验证依赖完整性
smart_install_if_needed() { ... } # 智能安装:仅在检查失败时安装
# ... 其他函数
# ==============================================================================
# LAYER 2: 初始化与自修复
# ==============================================================================
init_directories() { ... }
clean_stale_pids() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 3: 参数化启动
# ==============================================================================
parse_arguments() { ... }
print_usage() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 4: 模块化插件系统
# ==============================================================================
load_modules() { ... }
# ... 其他函数
# ==============================================================================
# LAYER 5: 监控与日志
# ==============================================================================
log_info() { ... }
get_process_info() { ... }
# ... 其他函数
# ==============================================================================
# 服务管理功能(用户定制区)
# ==============================================================================
start_service() {
log_info "Starting service..."
# 👇 在这里添加你的启动逻辑
}
stop_service() {
log_info "Stopping service..."
# 👇 在这里添加你的停止逻辑
}
# ==============================================================================
# 交互式菜单
# ==============================================================================
print_banner() { ... }
show_menu() { ... }
interactive_mode() { ... }
# ==============================================================================
# 主入口
# ==============================================================================
main() {
parse_arguments "$@"
init_system
load_modules
if [ -n "$COMMAND" ]; then
execute_command "$COMMAND"
else
interactive_mode
fi
}
main "$@"
```
---
## 🔍 验收标准
### 功能完整性
- ✅ 包含全部 5 个层级的功能
- ✅ 支持交互式和非交互式两种模式
- ✅ 实现所有核心服务管理功能
- ✅ 包含完整的日志和监控系统
### 代码质量
- ✅ 通过 shellcheck 检查(无错误)
- ✅ 符合 Bash 编码规范
- ✅ 所有函数有错误处理
- ✅ 变量正确引用(加引号)
### 可用性
- ✅ 首次运行即可使用(自动初始化)
- ✅ 后续运行快速启动(智能检查,无重复安装)
- ✅ 幂等性验证通过(重复运行不改变已有环境)
- ✅ 帮助信息清晰(--help
- ✅ 错误提示明确
- ✅ 操作反馈及时
### 可维护性
- ✅ 代码结构清晰
- ✅ 函数职责单一
- ✅ 易于添加新功能
- ✅ 支持模块化扩展
---
## 📚 附加要求
### 文档输出
生成脚本后,同时生成:
1. **README.md** - 快速开始指南
2. **模块示例** - modules/example.sh
3. **使用说明** - 如何定制脚本
### 示例场景
提供以下场景的实现示例:
1. **Python 应用**: 启动 Flask/Django 应用
2. **Node.js 应用**: 启动 Express 应用
3. **数据库**: 启动/停止 PostgreSQL
4. **容器化**: 启动 Docker 容器
---
## 🚀 使用示例
### 基本使用
```bash
# 首次运行(自动配置环境:安装依赖、创建虚拟环境)
./control.sh --force
# 后续运行(智能检查:仅验证环境,不重复安装,启动快速)
./control.sh
# 交互式菜单
./control.sh
# 命令行模式
./control.sh start --silent
./control.sh status
./control.sh stop --silent
```
### CI/CD 集成
```yaml
# GitHub Actions
- name: Deploy
run: |
chmod +x control.sh
./control.sh start --silent --force
./control.sh status || exit 1
```
### Systemd 集成
```ini
[Service]
ExecStart=/path/to/control.sh start --silent
ExecStop=/path/to/control.sh stop --silent
Restart=on-failure
```
---
## 💡 定制指南
### 最小修改清单
用户只需修改以下 3 处即可使用:
1. **项目路径**(可选)
```bash
PROJECT_ROOT="${SCRIPT_DIR}"
```
2. **启动逻辑**
```bash
start_service() {
# 👇 添加你的启动命令
nohup python3 app.py >> logs/app.log 2>&1 &
echo $! > data/app.pid
}
```
3. **停止逻辑**
```bash
stop_service() {
# 👇 添加你的停止命令
kill $(cat data/app.pid)
rm -f data/app.pid
}
```
---
## 🎓 补充说明
### 命名约定
- **脚本名称**: `control.sh``项目名-control.sh`
- **PID 文件**: `service_name.pid`
- **日志文件**: `control.log`, `service.log`
- **模块文件**: `modules/功能名.sh`
### 配置优先级
```
1. 命令行参数 (最高优先级)
2. 环境变量
3. .env 文件
4. 脚本内默认值 (最低优先级)
```
### 安全建议
- ❌ 不要在脚本中硬编码密码、Token
- ✅ 使用 .env 文件管理敏感信息
- ✅ .env 文件添加到 .gitignore
- ✅ 限制脚本权限 (chmod 750)
- ✅ 验证用户输入(防止注入)
---
## ✅ 生成清单
生成完成后,应交付:
1. **control.sh** - 主控制脚本400-500 行)
2. **README.md** - 使用说明
3. **modules/example.sh** - 模块示例(可选)
4. **.env.example** - 环境变量模板(可选)
---
**版本**: v2.0
**最后更新**: 2025-11-07
**兼容性**: Bash 4.0+, Ubuntu/CentOS/macOS
---
## 📝 提示词使用方法
将本文档作为提示词提供给 AI 时,使用以下格式:
```
请根据《生产级 Shell 控制面板生成规格说明》生成一个控制面板脚本。
项目信息:
- 项目名称: [你的项目名称]
- 用途: [描述项目用途]
- 主要功能: [列出需要的主要功能]
特殊要求:
- [列出任何额外的特殊要求]
请严格按照规格说明中的 5 层架构实现,确保所有功能完整且可用。
```
---
**注意**: 本规格说明经过实战验证,覆盖了生产环境 99% 的常见需求。严格遵循本规格可生成高质量、可维护的控制面板脚本。