Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kabouzeid/turm
TUI for the Slurm Workload Manager
https://github.com/kabouzeid/turm
rust slurm terminal tui tui-rs
Last synced: 2 days ago
JSON representation
TUI for the Slurm Workload Manager
- Host: GitHub
- URL: https://github.com/kabouzeid/turm
- Owner: kabouzeid
- License: mit
- Created: 2023-01-29T15:13:40.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-02T21:16:18.000Z (4 months ago)
- Last Synced: 2025-01-02T22:35:14.892Z (7 days ago)
- Topics: rust, slurm, terminal, tui, tui-rs
- Language: Rust
- Homepage: https://crates.io/crates/turm
- Size: 86.9 KB
- Stars: 133
- Watchers: 3
- Forks: 6
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# turm
A text-based user interface (TUI) for the [Slurm Workload Manager](https://slurm.schedmd.com/), which provides a convenient way to manage your cluster jobs.
`turm` accepts the same options as `squeue` (see [man squeue](https://slurm.schedmd.com/squeue.html#SECTION_OPTIONS)). Use `turm --help` to get a list of all available options.
## Installation
`turm` is available on [PyPI](https://pypi.org/project/turm/) and [crates.io](https://crates.io/crates/turm):
```shell
# With pip.
pip install turm# With pipx.
pipx install turm# With uv.
uv tool install turm# With cargo.
cargo install turm# With wget. Make sure ~/.local/bin is in your $PATH.
wget https://github.com/kabouzeid/turm/releases/latest/download/turm-x86_64-unknown-linux-musl.tar.gz -O - | tar -xz -C ~/.local/bin/
```The [release page](https://github.com/kabouzeid/turm/releases) also contains precompiled binaries for Linux.
### Shell Completion (optional)
#### Bash
In your `.bashrc`, add the following line:
```bash
eval "$(turm completion bash)"
```#### Zsh
In your `.zshrc`, add the following line:
```zsh
eval "$(turm completion zsh)"
```#### Fish
In your `config.fish` or in a separate `completions/turm.fish` file, add the following line:
```fish
turm completion fish | source
```## How it works
`turm` obtains information about jobs by parsing the output of `squeue`.
The reason for this is that `squeue` is available on all Slurm clusters, and running it periodically is not too expensive for the Slurm controller ( particularly when [filtering by user](https://slurm.schedmd.com/squeue.html#OPT_user)).
In contrast, Slurm's C API is unstable, and Slurm's REST API is not always available and can be costly for the Slurm controller.
Another advantage is that we get free support for the exact same CLI flags as `squeue`, which users are already familiar with, for filtering and sorting the jobs.### Ressource usage
TL;DR: `turm` ≈ `watch -n2 squeue` + `tail -f slurm-log.out`
Special care has been taken to ensure that `turm` is as lightweight as possible in terms of its impact on the Slurm controller and its file I/O operations.
The job queue is updated every two seconds by running `squeue`.
When there are many jobs in the queue, it is advisable to specify a single user to reduce the load on the Slurm controller (see [squeue --user](https://slurm.schedmd.com/squeue.html#OPT_user)).
`turm` updates the currently displayed log file on every inotify modify notification, and it only reads the newly appended lines after the initial read.
However, since inotify notifications are not supported for remote file systems, such as NFS, `turm` also polls the file for newly appended bytes every two seconds.