用途
Background Service Manager 用于创建和管理长时间运行的后台进程。它面向需要持续运行数小时甚至数天的任务,例如批处理作业(提取、嵌入、ETL)、持续数据管道、队列或定时任务的后台工作进程,以及任何需要监控和重启能力的服务。
主要能力
该技能提供以下能力:
- 启动、停止、状态查询、重启和日志查看等控制命令。
- 通过 PID 文件跟踪运行中的进程,避免重复启动。
- 使用 nohup 将进程输出重定向到日志文件。
- 优雅关闭处理:先发送普通终止信号,等待一段时间后再强制终止。
- 多服务管理:可同时管理多个服务,支持启动全部、停止全部或操作指定服务。
- 状态仪表盘:显示数据库统计、后台进程状态和最近活动日志。
- Python 服务包装器:通过信号处理实现优雅关闭,适用于 Python 编写的后台服务。
使用方式
快速开始步骤:
- 复制基础服务脚本模板。
- 将 SERVICE_CMD 设置为要运行的实际进程命令。
- 赋予可执行权限:chmod +x service.sh。
- 启动服务:./service.sh start。
- 监控:./service.sh status 或 ./service.sh logs。
基础服务脚本示例:
#!/bin/bash
# Quick service wrapper
SERVICE_NAME="myservice"
PID_FILE="/tmp/${SERVICE_NAME}.pid"
LOG_FILE="/tmp/${SERVICE_NAME}.log"
SERVICE_CMD="python3 ./worker.py"
case "$1" in
start)
nohup $SERVICE_CMD >> "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "Started (PID: $!)"
;;
stop)
[ -f "$PID_FILE" ] && kill $(cat "$PID_FILE") && rm "$PID_FILE"
;;
status)
[ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null && echo "Running" || echo "Stopped"
;;
*) echo "Usage: $0 {start|stop|status}" ;;
esac
完整服务脚本支持 start、stop、status、restart、logs 五个命令,包含重复启动检查、优雅关闭等待、强制终止、资源使用显示等功能。
多服务管理脚本通过关联数组定义多个服务,支持按名称启动或停止单个服务,也支持启动全部、停止全部和重启全部。
状态仪表盘脚本可显示数据库统计信息(如文档总数、已提取数、分块总数)、各后台进程运行状态以及最近日志摘要。
Python 服务包装器通过注册 SIGTERM 和 SIGINT 信号处理器,在主循环中检查关闭请求,并在退出前执行清理逻辑。
适用场景
- 运行长时间批处理作业(提取、嵌入、ETL)。
- 管理持续数据管道。
- 队列或定时任务的后台工作进程。
- 任何需要运行数小时或数天的进程。
- 需要监控和重启能力的服务。
限制与注意事项
- 该技能以脚本模板形式提供,需要用户根据实际进程命令进行定制。
- PID 文件和日志文件默认存放在 /tmp/ 目录,需注意目录权限和磁盘空间。
- 若进程崩溃后 PID 文件残留,可能出现“Already running”误报,需要手动清理。
- 日志文件未内置自动轮转,需自行管理日志大小。
- 文档中未提供关于收费、价格或平台支持的具体信息。