Add Proxmox VM task controller script and README
This commit is contained in:
127
README.md
127
README.md
@@ -1,104 +1,87 @@
|
||||
# Proxmox 虚拟机任务控制器
|
||||
# Proxmox VM 任务控制器
|
||||
|
||||
一个Python脚本系统,用于自动化控制Proxmox虚拟机执行任务。小主机平时待机监听,接收命令后启动VM执行任务,完成后自动关闭VM。
|
||||
一个Python脚本,用于自动化控制Proxmox虚拟机执行任务。小主机平时待机监听,接受命令后启动VM执行任务,完成后关闭VM。
|
||||
|
||||
## 功能特性
|
||||
## 功能特点
|
||||
|
||||
- 📡 **命令监听**:监控指定目录的JSON命令文件
|
||||
- 🖥️ **VM管理**:通过Proxmox API启动/关闭虚拟机
|
||||
- 🔧 **任务执行**:通过SSH在VM内执行自定义命令
|
||||
- 📊 **状态汇报**:实时汇报任务执行状态
|
||||
- 🔒 **安全认证**:支持API Token和SSH密钥认证
|
||||
- 📝 **日志记录**:完整的操作日志和错误追踪
|
||||
- **待机监听**:持续监控命令目录,平时保持低功耗状态
|
||||
- **自动启停**:按需启动/关闭Proxmox虚拟机
|
||||
- **任务执行**:通过SSH在VM内执行命令
|
||||
- **状态汇报**:实时记录任务执行状态和结果
|
||||
- **错误处理**:完善的错误处理和超时机制
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装依赖
|
||||
### 环境要求
|
||||
|
||||
- Python 3.8+
|
||||
- Proxmox VE 6.x+
|
||||
- SSH访问权限
|
||||
|
||||
### 安装配置
|
||||
|
||||
1. 克隆仓库
|
||||
```bash
|
||||
pip install requests paramiko python-dotenv
|
||||
git clone http://124.223.26.33:3000/xiaji/proxmox-task.git
|
||||
cd proxmox-task
|
||||
```
|
||||
|
||||
### 2. 配置环境
|
||||
|
||||
复制环境模板并填写配置:
|
||||
|
||||
2. 设置环境变量
|
||||
```bash
|
||||
cp .env.template .env
|
||||
# 编辑 .env 文件,填写Proxmox和VM信息
|
||||
export PROXMOX_HOST="your-proxmox-host"
|
||||
export PROXMOX_USER="root@pam"
|
||||
export PROXMOX_TOKEN="your-api-token"
|
||||
export VM_ID="100"
|
||||
export SSH_USER="ubuntu"
|
||||
export SSH_KEY_PATH="/path/to/ssh/key"
|
||||
```
|
||||
|
||||
配置说明:
|
||||
- `PROXMOX_HOST`: Proxmox服务器地址
|
||||
- `PROXMOX_API_TOKEN`: Proxmox API Token
|
||||
- `VM_ID`: 目标虚拟机ID
|
||||
- `VM_SSH_*`: 虚拟机SSH连接信息
|
||||
- `COMMAND_DIR`: 命令监听目录
|
||||
|
||||
### 3. 运行脚本
|
||||
|
||||
3. 运行脚本
|
||||
```bash
|
||||
python3 proxmox_task_controller.py
|
||||
```
|
||||
|
||||
### 4. 作为系统服务(推荐)
|
||||
|
||||
```bash
|
||||
# 复制文件到系统目录
|
||||
sudo cp proxmox_task_controller.py /opt/proxmox-task/
|
||||
sudo cp .env /opt/proxmox-task/
|
||||
sudo cp proxmox-task.service /etc/systemd/system/
|
||||
|
||||
# 启用并启动服务
|
||||
sudo systemctl enable proxmox-task
|
||||
sudo systemctl start proxmox-task
|
||||
```
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 创建任务命令
|
||||
|
||||
在 `COMMAND_DIR` 目录(默认 `/var/task-commands`)创建JSON文件:
|
||||
### 使用示例
|
||||
|
||||
1. 创建任务命令文件 `/var/task-commands/task-001.json`:
|
||||
```json
|
||||
{
|
||||
"task_id": "backup-2024-01-15",
|
||||
"command": "cd /opt/backup && ./run_backup.sh"
|
||||
"task_id": "task-001",
|
||||
"command": "cd /opt/myapp && python3 run_task.py"
|
||||
}
|
||||
```
|
||||
|
||||
文件名建议使用唯一标识,如 `task-backup-2024-01-15.json`。
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 实时日志
|
||||
tail -f /var/log/proxmox_task_controller.log
|
||||
|
||||
# 系统服务日志
|
||||
journalctl -u proxmox-task -f
|
||||
2. 查看状态文件 `/var/task-status/task-001.json`:
|
||||
```json
|
||||
{
|
||||
"task_id": "task-001",
|
||||
"status": "success",
|
||||
"message": "任务执行成功",
|
||||
"output": "Task completed successfully...",
|
||||
"timestamp": 1234567890
|
||||
}
|
||||
```
|
||||
|
||||
## 系统要求
|
||||
## 配置选项
|
||||
|
||||
- Python 3.8+
|
||||
- Proxmox VE 6.0+
|
||||
- 网络访问权限
|
||||
- SSH密钥认证配置
|
||||
| 变量名 | 说明 | 默认值 |
|
||||
|--------|------|--------|
|
||||
| PROXMOX_HOST | Proxmox主机地址 | localhost |
|
||||
| PROXMOX_USER | API用户 | root@pam |
|
||||
| PROXMOX_TOKEN | API Token | (必需) |
|
||||
| VM_ID | 虚拟机ID | 100 |
|
||||
| SSH_USER | SSH用户名 | ubuntu |
|
||||
| SSH_KEY_PATH | SSH私钥路径 | ~/.ssh/id_rsa |
|
||||
| COMMAND_DIR | 命令目录 | /var/task-commands |
|
||||
| STATUS_DIR | 状态目录 | /var/task-status |
|
||||
| CHECK_INTERVAL | 检查间隔(秒) | 10 |
|
||||
|
||||
## 安全建议
|
||||
|
||||
- 使用API Token而非密码
|
||||
- 限制Proxmox API访问IP
|
||||
- 使用专用SSH密钥
|
||||
- 定期更新依赖库
|
||||
|
||||
## 故障排查
|
||||
|
||||
1. **Proxmox连接失败**:检查API Token和主机地址
|
||||
2. **SSH连接失败**:验证密钥路径和VM SSH配置
|
||||
3. **命令执行超时**:调整命令超时时间
|
||||
4. **VM启动慢**:增加等待就绪时间
|
||||
- 使用Proxmox API Token而非密码
|
||||
- 限制API Token权限
|
||||
- 使用SSH密钥认证
|
||||
- 在受信任网络中运行
|
||||
|
||||
## 许可证
|
||||
|
||||
|
||||
Reference in New Issue
Block a user