# Slurm常用指令與參數
:::success
下表為Slurm常用之指令:
<tr>
<td></td>
<td></td>
</tr>
<table>
<tr>
<td>指令</td>
<td>功能說明</td>
</tr>
<tr>
<td>sinfo</td>
<td>查詢佇列(Partitiond)清單與節點狀態 </td>
</tr>
<tr>
<td>squeue</td>
<td > 查詢已提交的Job狀態</td>
</tr>
<tr>
<td>sbatch</td>
<td>(建議) 以batch方式提交Job,適合多節點運算。<br>必須指定--account=<PROJECT_ID></br></td>
</tr>
<tr>
<td> srun</td>
<td> 提交Job,直接執行指令且需等待指令執行完成,適合需即時查看輸出的程式除錯工作。
<br>在sbatch腳本或salloc shell中,代表一個工作步驟(Job Step)。</br>
</td>
</tr>
<tr>
<td>salloc</td>
<td>提交互動式Job,自動產生一個Shell,離開Shell後Job將自動終止,亦可直接登入Job分配的計算節點,適合用於計算程式開發與除錯工作。
<br>必須指定 --account=<PROJECT_ID></PROJECT_ID></br>
</td>
</tr>
<tr>
<td>squeue</td>
<td>查詢已提交的Job狀態</td>
</tr>
<tr>
<td>scontrol</td>
<td>查詢執行中Job的詳細資訊,如CPU、Memory與節點分配數量</td>
</tr>
<tr>
<td>scancel</td>
<td>停止Job</td>
</tr>
<tr>
<td>sacct</td>
<td>列出帳號以往執行過的Job與Job steps。若沒指定時間,預設查詢過去24小時的Job清單。</td>
</tr>
</table>
<font color="#f00"> 備註: 萬一登入節點當機時,若原本使用 ==srun==或是==salloc== 指令提交 job,可能會造成計算中斷或資料遺失,因此除了除錯或開發用途之外,建議先編輯好job script,然後使用 ==sbatch== 指令提交計算工作。
</font>
:::
### sinfo
| 指令參數 | 說明 |
|-|-|
| sinfo | 查看partition與節點資訊 |
| sinfo --states=idle | 查看可用(idle)節點資訊 |
| sinfo --partition=<partition> | 查看特定partition資訊 |
| sinfo -N -l | 查詢節點狀態 |
| sinfo --help | 查看所有選項 |
### squeue
| 指令參數 | 說明 |
|-|-|
| squeue | 查看已提交的Job狀態資訊 |
| squeue -j <job_id> | 查看特定Job資訊 |
| squeue -l | 查看細節資訊 |
| squeue --state=<state> | 查看特定狀態的Job。常用的state有:R(Running)、PD(Pending) |
| squeue --help | 查看所有的選項 |
<!---
:::info
補充說明
派送job過程中,常見的PENDING的情況,可以去查詢官方網址查詢原因。
[官網_job_reason_codes](https://slurm.schedmd.com/job_reason_codes.html)
`[user@cbi-lgn01 ~]$ squeue -u user`
`JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)`
`8260 normal singular user PD 0:00 2 (MaxGRESPerAccount)
`
(MaxGRESPerAccount):這通常與資源限制或配額有關。
:::
--->
### scontrol
| 指令參數 | 說明 |
|-|-|
| scontrol show job <job_id> | 查看排隊或正在運行的Job詳細資訊 |
| scontrol show node <node> | 查看計算節點可用資源規格 |
### scancel
| 指令參數 | 說明 |
|-|-|
| scancel <job_id> | 刪除Job |
| scancel -i -u $UID | 互動式詢問刪除用戶自己的Job |
### sacct
| 指令參數 | 說明 |
|-|-|
| sacct | 列出過去24小時內結束的Job清單 |
| sacct -j <job_id> | 列出指定的已結束Job |
| sacct --starttime $(date -d "7 days ago" +%Y-%m-%d) | 列出過去7天內結束的Job清單 |
| sacct --help | 查看所有的選項 |