# gjob 参考

`gjob` 用于管理已有任务，包括查看详情、修改排队任务、重提任务，以及处理 tmux 会话。

## 用法

```bash
gjob <command> [args]
gjob completion <shell>
```

## 常见示例

```bash
# 查看任务详情
gjob show 42

# 输出最近一次任务的日志
gjob log @

# 连接到正在运行任务的 tmux 会话
gjob attach @

# 暂停或恢复排队任务
gjob hold 10-12
gjob release 10,11

# 原地修改排队/暂停任务
gjob update 42 --gpus 2 --time-limit 4:00:00

# 重提失败任务，并增加时间限制
gjob redo 42 --time 8:00:00

# 修复父任务后，级联重做被其失败连带取消的子任务
gjob redo 42 --cascade

# 清理已完成任务的 tmux 会话
gjob close-sessions --all
```

## 子命令

### `gjob attach <job>`

连接到任务的 tmux 会话。

别名：`gjob a`

```bash
gjob attach <job>
```

`<job>` 支持数字任务 ID，或用 `@` 表示最近一次任务。

### `gjob log <job>`

将任务日志输出到标准输出。

别名：`gjob l`

```bash
gjob log <job>
```

`<job>` 支持数字任务 ID，或用 `@` 表示最近一次任务。

### `gjob hold <job_ids>`

将排队中的任务设为 hold。

别名：`gjob h`

```bash
gjob hold <job_ids>
```

`<job_ids>` 支持单个 ID、逗号分隔列表，以及 `1-3` 这样的区间。

### `gjob release <job_ids>`

将 hold 状态的任务重新放回队列。

别名：`gjob r`

```bash
gjob release <job_ids>
```

`<job_ids>` 支持单个 ID、逗号分隔列表，以及 `1-3` 这样的区间。

### `gjob show <job_ids>`

显示任务详细信息，包括资源、依赖、时间信息和 tmux 会话名。

别名：`gjob s`

```bash
gjob show <job_ids>
```

`<job_ids>` 支持单个 ID、逗号分隔列表，以及 `1-3` 这样的区间。

### `gjob update <job_ids>`

原地更新排队中或 hold 状态的任务。

别名：`gjob u`

```bash
gjob update <job_ids> [options]
```

选项：

- `-c, --command <command>`：替换命令
- `-s, --script <path>`：替换脚本路径
- `-g, --gpus <count>`：修改 GPU 数量
- `-e, --conda-env <name>`：设置 conda 环境
- `--clear-conda-env`：清除 conda 环境
- `-p, --priority <0-255>`：修改优先级
- `-t, --time-limit <time>`：修改时间限制
- `--clear-time-limit`：清除时间限制
- `-m, --memory-limit <memory>`：修改主机内存限制
- `--clear-memory-limit`：清除主机内存限制
- `--gpu-memory <memory>`：修改每张 GPU 的显存限制
- `--clear-gpu-memory-limit`：清除每张 GPU 的显存限制
- `-d, --depends-on <ids>`：替换依赖
- `--depends-on-all <ids>`：设置 AND 依赖
- `--depends-on-any <ids>`：设置 OR 依赖
- `--auto-cancel-on-dep-failure`：开启依赖失败自动取消
- `--no-auto-cancel-on-dep-failure`：关闭依赖失败自动取消
- `--max-concurrent <n>`：设置任务组最大并发
- `--clear-max-concurrent`：清除任务组最大并发
- `--param <key=value>`：更新模板参数，可重复传入

### `gjob redo <job>`

基于已有任务创建一个新任务，并可覆盖部分字段。

```bash
gjob redo <job> [options]
```

选项：

- `-g, --gpus <count>`：覆盖 GPU 数量
- `-p, --priority <0-255>`：覆盖优先级
- `-d, --depends-on <job|@>`：覆盖依赖
- `-t, --time <time>`：覆盖时间限制
- `-m, --memory <memory>`：覆盖主机内存限制
- `--gpu-memory <memory>`：覆盖每张 GPU 的显存限制
- `-e, --conda-env <name>`：覆盖 conda 环境
- `--clear-deps`：清除从原任务继承的依赖
- `--cascade`：同时重做因该任务失败而被自动取消的下游任务

`<job>` 支持数字任务 ID，或用 `@` 表示最近一次任务。

### `gjob close-sessions`

默认关闭已完成任务的 tmux 会话；也可以通过过滤条件精确指定。

别名：`gjob close`

```bash
gjob close-sessions [options]
```

选项：

- `-j, --jobs <job_ids>`：按任务 ID、区间或逗号分隔列表筛选
- `-s, --state <states>`：按状态筛选，例如 `finished,failed,cancelled`
- `-p, --pattern <text>`：按 tmux 会话名子串筛选
- `-a, --all`：关闭所有已完成任务的会话，但会跳过当前仍在运行任务的会话

说明：

- 不带任何过滤条件时，`gjob close-sessions` 不会执行关闭操作。
- 带过滤条件时，默认只会命中终态任务。
- 如需关闭非终态任务的会话，请显式传 `--state`。

### `gjob completion <shell>`

生成 shell 自动补全脚本。

```bash
gjob completion bash
gjob completion zsh
gjob completion fish
```

## 格式

- 时间值支持 `HH:MM:SS`、`MM:SS`，或单个整数表示分钟。
- 内存值支持 `512` 这类 MB 整数，或 `1024M`、`24G` 这类单位格式。
- GPU 显存值使用相同语法，并按每张 GPU 生效。

## 另见

- [任务提交](../user-guide/job-submission)
- [任务生命周期](../user-guide/job-lifecycle)
- [任务依赖](../user-guide/job-dependencies)
