pueue/README.md

224 lines
8.8 KiB
Markdown
Raw Normal View History

2019-12-16 17:11:33 +00:00
# Pueue
2020-01-29 19:47:24 +00:00
[![GitHub Actions Workflow](https://github.com/nukesor/pueue/workflows/Test%20build/badge.svg)](https://github.com/Nukesor/comfy-table/actions)
[![Crates.io](https://img.shields.io/crates/v/pueue)](https://crates.io/crates/pueue)
2019-12-16 17:11:33 +00:00
[![MIT Licence](https://img.shields.io/pypi/l/pueue.svg)](https://github.com/Nukesor/pueue/blob/master/LICENSE)
2020-01-29 19:47:24 +00:00
[![dependency status](https://deps.rs/repo/github/nukesor/pueue/status.svg)](https://deps.rs/repo/github/nukesor/pueue)
2019-12-16 17:11:33 +00:00
[![Patreon](https://github.com/Nukesor/images/blob/master/patreon-donate-blue.svg)](https://www.patreon.com/nukesor)
2019-12-20 15:52:08 +00:00
[![Paypal](https://github.com/Nukesor/images/blob/master/paypal-donate-blue.svg)](https://www.paypal.me/arnebeer/)
2019-12-16 17:11:33 +00:00
2019-12-17 02:19:27 +00:00
![Pueue](https://raw.githubusercontent.com/Nukesor/images/master/pueue.gif)
2019-12-16 17:11:33 +00:00
2019-12-17 02:41:24 +00:00
Pueue is a command-line task management tool for sequential and parallel execution of long-running tasks.
2020-01-29 20:39:07 +00:00
Simply put, it's a tool that processes a queue of shell commands.
On top of that, there are a lot of convenience features and abstractions.
2019-12-16 17:11:33 +00:00
2019-12-17 02:41:24 +00:00
Since Pueue is not bound to any terminal, you can control your tasks from any terminal on the same machine.
The queue will be continuously processed, even if you no longer have any active ssh session.
2019-12-16 17:11:33 +00:00
It provides functionality for:
2019-12-17 02:41:24 +00:00
- Scheduling commands that will be executed in their respective working directories
2019-12-16 17:11:33 +00:00
- Easy output inspection.
- Interaction with running processes
2020-02-02 13:35:45 +00:00
- Pausing/Resuming tasks, when you need some processing power right NOW!
2019-12-16 17:11:33 +00:00
- Manipulation of the scheduled task order
- Running multiple tasks at once (You can decide how many concurrent tasks you want to run)
2020-02-02 13:35:45 +00:00
- Works on Linux and MacOS and partially on Windows.
2020-02-02 13:40:45 +00:00
**Disclaimer:** Windows support is highly experimental right now. This means:
- Pueue uses `powershell` to execute commands, keep this in mind when writing commands.
- Starting/resuming commands doesn't work for now.
2019-12-16 17:11:33 +00:00
**Pueue has been rewritten in Rust!!** If you want the old version that's build with python, please install via pip.
2019-12-16 17:11:33 +00:00
## Why should I use it?
2020-01-29 20:47:39 +00:00
Imagine having to unpack or transfer large amounts of data from different directories to other directories.
Usually something like this ends with about 10 open terminals/tmux sessions and an over-challenged hard drive.
2019-12-16 17:11:33 +00:00
2019-12-17 02:39:35 +00:00
Pueue is specifically designed for these situations. It executes long-running tasks in their respective directories, without being bound to any terminal.
2019-12-16 17:11:33 +00:00
2020-01-19 16:37:25 +00:00
**A few possible applications:**
2019-12-16 17:11:33 +00:00
- Copying huge amounts of stuff
- Compression tasks
- Movie encoding
- `rsync` tasks
2020-01-29 20:47:39 +00:00
- Anything that takes longer than 5 minutes
2019-12-16 17:11:33 +00:00
Pueue made at least my life a lot easier on many occasions.
2020-01-29 20:39:07 +00:00
If you like the project and feel like something is missing, please create an issue.
2019-12-17 02:39:35 +00:00
I'm always open to suggestions and already implemented a few users requested features.
2019-12-16 17:11:33 +00:00
2020-01-29 20:39:07 +00:00
PRs are of course very welcome!
2019-12-16 17:11:33 +00:00
## Installation:
There are three different ways to install Pueue.
2020-01-19 16:38:16 +00:00
**Arch Linux**
2020-01-19 16:37:25 +00:00
Use an Arch Linux AUR package manager e.g. yay: `yay -S pueue`.
This will deploy the service file and completions automatically.
2020-01-19 16:38:16 +00:00
**Cargo**
2020-01-19 16:37:25 +00:00
You'll need Rust version `>=1.39`
2020-01-19 16:38:16 +00:00
```
cargo install pueue
```
2020-01-19 16:37:25 +00:00
This will install pueue to `~/.cargo/bin/pueue`
2020-01-19 16:38:16 +00:00
**From Source**
2020-01-19 16:37:25 +00:00
You'll need Rust version `>=1.39`
```
git clone git@github.com:Nukesor/pueue
cd pueue
cargo install --path .
```
This will install pueue to `~/.cargo/bin/pueue`
2019-12-16 17:11:33 +00:00
2020-01-29 20:39:07 +00:00
## Starting the Daemon
### Local
Just run `pueued` anywhere on your commandline. It'll exit if you close the terminal, though.
### Background
To fork `pueued` into the background, add the `-d` or `--daemonize` flag. E.g. `pueued -d`. \
The daemon can be then shut down using the client: `pueue shutdown`
### Systemd
If you use Systemd and don't install Pueue with a package manager, place `pueued.service` in `/etc/systemd/user/`.
Afterward, every user can start/enable their own session with:
systemctl --user start pueued.service
systemctl --user enable pueued.service
2019-12-16 17:11:33 +00:00
## How to use it:
2020-02-02 15:19:14 +00:00
**Adding Commands:**
2020-02-02 15:18:43 +00:00
2020-02-02 15:14:04 +00:00
To add a command just write: `pueue add sleep 60`\
2020-02-02 15:15:38 +00:00
If you want to add flags to the command, you can either:
2020-02-02 15:14:04 +00:00
- add `--` => `pueue add -- ls -al`
- surround the command with a string `pueue add 'ls -al'`
2020-02-02 15:18:43 +00:00
The command will then be added and scheduled for execution, as if you executed it right now and then.
2020-02-02 15:14:04 +00:00
For normal operation it's recommended to add an alias to your shell's rc.\
2020-02-02 15:15:38 +00:00
E.g.: `alias pad='pueue add --'`
2020-02-02 15:14:04 +00:00
Surrounding a command with quotes is also required, if your command contains escaped characters.\
2020-02-02 15:15:38 +00:00
For instance `pueue add ls /tmp/long\ path` will result in the execution of `sh -c ls /tmp/long path`, which will then break, as the escaped space is not passed to Pueue.
2020-02-02 15:18:43 +00:00
**See what's going on:**
To get the status of currently running commands, just type `pueue status`.\
To look at the output of a finished command use `pueue log` or `pueue log $task_id`.
If you want to see output of a running command use `git show task_id`.
You can also use the `-f` and `-e` flag to get a live view of the output.
2019-12-16 17:11:33 +00:00
2020-02-02 15:19:14 +00:00
**Pitfalls:**
2020-02-02 13:35:45 +00:00
To avoid common pitfalls, please read the [FAQ Section](https://github.com/Nukesor/pueue/blob/master/FAQ.md).
There is a help option (-h) for all commands.
2019-12-16 17:11:33 +00:00
```
2020-01-19 16:45:54 +00:00
Pueue client 0.0.5
2019-12-16 17:11:33 +00:00
Arne Beer <contact@arne.beer>
Interact with the Pueue daemon
USAGE:
2020-01-19 16:45:54 +00:00
pueue [FLAGS] [OPTIONS] <SUBCOMMAND>
2019-12-16 17:11:33 +00:00
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
-v, --verbose Verbose mode (-v, -vv, -vvv)
OPTIONS:
2020-01-19 16:45:54 +00:00
-p, --port <port> The port for the daemon. Overwrites the port in the config file
2019-12-16 17:11:33 +00:00
SUBCOMMANDS:
add Enqueue a task for execution
2020-01-19 16:45:54 +00:00
clean Remove all finished tasks from the list (also clears logs)
edit Edit the command of a stashed or queued task
enqueue Enqueue stashed tasks. They'll be handled normally afterwards
2019-12-16 17:11:33 +00:00
help Prints this message or the help of the given subcommand(s)
2020-01-19 16:45:54 +00:00
kill Kill running tasks
2019-12-16 17:11:33 +00:00
log Display the log output of finished tasks
parallel Set the amount of allowed parallel tasks
pause Pause the daemon and all running tasks. A paused daemon won't start any new tasks. Daemon and tasks
can be continued with `start`
2020-01-19 16:45:54 +00:00
remove Remove tasks from the list. Running or paused tasks need to be killed first
reset Kill all running tasks, remove all tasks and reset max_id
restart Enqueue tasks again
2019-12-16 17:11:33 +00:00
send Send something to a task. Useful for sending confirmations ('y\n')
show Show the output of a currently running task This command allows following (like `tail -f`)
2020-01-19 16:45:54 +00:00
start Wake the daemon from its paused state. Also continues all paused tasks
2019-12-16 17:11:33 +00:00
stash Stashed tasks won't be automatically started. Either `enqueue` them, to be normally handled or
2020-01-19 16:45:54 +00:00
explicitly `start` them
2019-12-16 17:11:33 +00:00
status Display the current status of all tasks
switch Switches the queue position of two commands. Only works on queued and stashed commands
```
## Configs
The configuration file of Pueue is located in `~/.config/pueue.yml`.
```
---
client:
daemon_port: "6924"
secret: "your_secret"
2019-12-16 17:11:33 +00:00
daemon:
pueue_directory: /home/$USER/.local/share/pueue
default_parallel_tasks: 1
port: "6924"
secret: "your_secret"
2019-12-16 17:11:33 +00:00
```
**Client**:
- `daemon_port` The port the client tries to connect to.
- `secret` The secret, that's used for authentication
2019-12-16 17:11:33 +00:00
**Daemon**:
2019-12-17 02:39:35 +00:00
- `pueue_directory` The location Pueue uses for its intermediate files and logs.
2019-12-16 17:11:33 +00:00
- `default_parallel_tasks` Determines how many tasks should be processed concurrently.
- `port` The port the daemon should listen to.
- `secret` The secret, that's used for authentication
2019-12-16 17:11:33 +00:00
## Logs
All logs can be found in `${pueue_directory}/logs`.
Logs of previous Pueue sessions will be created whenever you issue a `reset` or `clean`.
In case the daemon fails or something goes wrong, the daemon will print to `stdout`/`stderr`.
If the daemon crashes or something goes wrong, please set the debug level to `-vvvv` and create an issue with the log!
If you want to dig right into it, you can compile and run it yourself with a debug build.
This would help me a lot!
2020-01-25 20:26:01 +00:00
## Utilities
2019-12-17 02:39:35 +00:00
### JSON Support
2019-12-16 17:11:33 +00:00
The Pueue client `status` and `log` commands support JSON output with the `-j` flag.
This can be used to easily incorporate it into window manager bars, such as i3bar.
2020-01-25 20:26:01 +00:00
## Scripting
When calling pueue commands in a script, you might need to sleep for a short amount of time for now.
The pueue server processes requests asynchronously, whilst the TaskManager runs it's own update loop with a small sleep.
(The TaskManager handles everything related to starting, stopping and communicating with processes.)
A sleep in scripts will probably become irrelevant, as soon as this bug in rust-lang is fixed: https://github.com/rust-lang/rust/issues/39364
2019-12-16 17:11:33 +00:00
Copyright &copy; 2019 Arne Beer ([@Nukesor](https://github.com/Nukesor))