An open API service indexing awesome lists of open source software.

https://github.com/x3ro/rly

Run multiple commands concurrently. A drop-in replacement for the NodeJS based application `concurrently`.
https://github.com/x3ro/rly

cli command-line concurrently parallel

Last synced: 11 months ago
JSON representation

Run multiple commands concurrently. A drop-in replacement for the NodeJS based application `concurrently`.

Awesome Lists containing this project

README

          

r[un concurrent]ly



Build Status
license
Version info

`rly` is a concurrent task runner and, in its current form, essentially a clone of [concurrently](https://github.com/open-cli-tools/concurrently). For example:

```bash
$ rly --names "server,client" \
--kill-others \
"nc -lk 1234" \
"echo 'message from client' | nc localhost 1234"
[server] message from client
[client] echo 'message from client' | nc localhost 1234 exited with exit status: 0
--> Sending SIGKILL to other processes..
[server] nc -lk 1234 exited with signal: 9 (SIGKILL)
```

## Installation

Currently you need to have rust installed in order to install `rly`:

```
cargo install rly
```

## Usage (in progress)

```text
Usage: rly [OPTIONS] [COMMANDS]...

Arguments:
[COMMANDS]...

Options:
-n, --names
List of custom names to be used in prefix template.

Example names: "main,browser,server"

--name-separator
The character to split on.

Example usage: -n "styles|scripts|server" --name-separator
"|"

[default: ,]

-r, --raw
Output only raw output of processes, disables prettifying
and concurrently coloring

--no-color
Disables colors from logging

--hide
Comma-separated list of processes for which to hide the
output. The processes can be identified by their name or
index

-g, --group
Order the output as if the commands were run sequentially

--timings
Show timing information for all processes

-P, --passthrough-arguments
Passthrough additional arguments to commands (accessible via
placeholders) instead of treating them as commands

-p, --prefix
Prefix used in logging for each process. Possible values:
index, pid, time, command, name, none, or a template.
Example template: "{time}-{pid}"

[default: [{name}]]

-c, --prefix-colors
Comma-separated list of chalk colors to use on prefixes. If
there are more commands than colors, the last color will be
repeated.

- Available modifiers: reset, bold, dim, italic, underline,
inverse, hidden, strikethrough

- Available colors: black, red, green, yellow, blue,
magenta, cyan, white, gray, any hex values for colors (e.g.
#23de43) or auto for an automatically picked color

- Available background colors: bgBlack, bgRed, bgGreen,
bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite

See https://www.npmjs.com/package/chalk for more
information.

[default: reset]

-l, --prefix-length
Limit how many characters of the command is displayed in
prefix. The option can be used to shorten the prefix when it
is set to "command"

[default: 10]

-t, --timestamp-format
Specify the timestamp in chrono::format syntax

[default: "%Y-%m-%d %H:%M:%S.%3f"]

-k, --kill-others
Kill other processes if one exits or dies

--kill-others-on-fail
Kill other processes if one exits with non zero status code

--restart-tries
How many times a process that died should restart. Negative
numbers will make the process restart forever

[default: 0]

--restart-after
Delay time to respawn the process, in milliseconds

[default: 0]

-h, --help
Print help information (use `-h` for a summary)

-V, --version
Print version information
```

## Why?

I like the UX of `concurrently`, but dislike having to install NodeJS / npm to use it. My goal is to make `rly` accessible via Homebrew (and potentially other package managers), so that installation only requires downloading a single binary.

## Progress implementing `concurrently` features

- [x] commands can be supplied
- [x] `--names` can be passed
- [x] `--name-separator`
- [x] `--raw`
- [x] `--no-color`
- [x] `--hide`
- [ ] `--group`
- [ ] `--timings`
- [ ] `--passthrough-arguments`
- [x] `--prefix`
- [x] index
- [x] pid
- [x] time
- [x] command
- [x] name
- [x] `--prefix-colors`
- [x] `--prefix-length`
- [x] `--timestamp-format`
- [x] `--kill-others`
- [x] `--kill-others-on-fail`
- [x] `--restart-tries`
- [x] `--restart-after`

# License

See `LICENSE` file.