name: 进程 description: “后台作业、长时间运行进程和任务管理” emoji: “⚙️”
进程 - 完整的API参考
生成和管理后台进程、长时间运行作业和计划任务。
聊天命令
启动作业
/job spawn "npm run backtest" 启动后台作业
/job spawn "python train.py" --name ml 命名作业
/job spawn "node bot.js" --restart 退出后自动重启
管理作业
/jobs 列出所有作业
/job status <id> 检查作业状态
/job output <id> 查看作业输出
/job output <id> --follow 流式输出
/job stop <id> 停止作业
/job restart <id> 重启作业
日志
/job logs <id> 查看日志
/job logs <id> --tail 100 最后100行
/job logs <id> --since 1h 最后一小时
TypeScript API参考
创建进程管理器
import { createProcessManager } from 'clodds/processes';
const processes = createProcessManager({
// 工作目录
cwd: process.cwd(),
// 环境
env: process.env,
// 限制
maxProcesses: 10,
maxMemoryMB: 1024,
// 日志
logDir: './logs/jobs',
maxLogSizeMB: 100,
// 存储
storage: 'sqlite',
dbPath: './jobs.db',
});
启动进程
// 简单启动
const job = await processes.spawn({
command: 'npm',
args: ['run', 'backtest'],
name: 'backtest-btc',
});
console.log(`作业ID: ${job.id}`);
console.log(`PID: ${job.pid}`);
// 带选项启动
const job = await processes.spawn({
command: 'python',
args: ['train.py', '--epochs', '100'],
name: 'ml-training',
// 环境
env: {
...process.env,
CUDA_VISIBLE_DEVICES: '0',
},
// 工作目录
cwd: '/path/to/ml-project',
// 自动重启
restart: true,
maxRestarts: 3,
restartDelayMs: 5000,
// 资源限制
maxMemoryMB: 4096,
timeoutMs: 3600000, // 1小时
});
列出作业
const jobs = await processes.list();
for (const job of jobs) {
console.log(`${job.id}: ${job.name}`);
console.log(` 状态: ${job.status}`); // 'running' | 'stopped' | 'failed' | 'completed'
console.log(` PID: ${job.pid}`);
console.log(` 开始时间: ${job.startedAt}`);
console.log(` 内存: ${job.memoryMB}MB`);
console.log(` CPU: ${job.cpuPercent}%`);
}
获取状态
const status = await processes.getStatus(jobId);
console.log(`状态: ${status.status}`);
console.log(`退出代码: ${status.exitCode}`);
console.log(`运行时间: ${status.runtimeMs}ms`);
console.log(`重启次数: ${status.restarts}`);
console.log(`内存: ${status.memoryMB}MB`);
console.log(`CPU: ${status.cpuPercent}%`);
获取输出
// 获取所有输出
const output = await processes.getOutput(jobId);
console.log(output.stdout);
console.log(output.stderr);
// 获取最后N行
const output = await processes.getOutput(jobId, { tail: 100 });
// 流式输出
const stream = processes.streamOutput(jobId);
stream.on('stdout', (data) => console.log(data));
stream.on('stderr', (data) => console.error(data));
stream.on('exit', (code) => console.log(`退出: ${code}`));
停止作业
// 优雅停止(SIGTERM)
await processes.stop(jobId);
// 强制杀死(SIGKILL)
await processes.stop(jobId, { force: true });
// 停止全部
await processes.stopAll();
重启作业
await processes.restart(jobId);
事件处理器
processes.on('started', (job) => {
console.log(`作业开始: ${job.name}`);
});
processes.on('stopped', (job) => {
console.log(`作业停止: ${job.name} (代码: ${job.exitCode})`);
});
processes.on('failed', (job, error), => {
console.error(`作业失败: ${job.name}`, error);
});
processes.on('output', (job, type, data) => {
console.log(`[${job.name}] ${type}: ${data}`);
});
作业状态
| 状态 | 描述 |
|---|---|
running |
正在执行 |
stopped |
用户停止 |
completed |
成功完成 |
failed |
错误退出 |
restarting |
自动重启中 |
用例
运行回测
const job = await processes.spawn({
command: 'npm',
args: ['run', 'backtest', '--', '--strategy', 'momentum'],
name: 'backtest-momentum',
});
// 等待完成
const result = await processes.wait(job.id);
console.log(`回测完成: ${result.exitCode === 0 ? '成功' : '失败'}`);
训练机器学习模型
const job = await processes.spawn({
command: 'python',
args: ['train.py'],
name: 'ml-training',
cwd: './ml',
maxMemoryMB: 8192,
timeoutMs: 86400000, // 24小时
});
// 监控进度
processes.streamOutput(job.id).on('stdout', (line) => {
if (line.includes('Epoch')) {
console.log(line);
}
});
最佳实践
- 给作业命名 —— 更容易识别
- 设置超时 —— 防止失控进程
- 监控内存 —— 防止OOM杀死
- 谨慎使用重启 —— 先调试失败
- 检查日志 —— 总是检查输出