2 releases

Uses old Rust 2015

0.1.1 Nov 27, 2017
0.1.0 Feb 10, 2017

#28 in #stop

GPL-3.0 license

25KB
540 lines

process-queue 🚋

process-queue is a tool for queuing sequential program executions using different sets of arguments. It can be useful for managing long-running tasks.

Installation

cargo install --git 'https://bitbucket.org/Soft/process-queue.git'

Usage

pqueue server [-h|--help] [-V|--version] [-n|--name NAME] [-c|--cd DIR] [-l|--log FILE] [-d|--daemon] [-r|--retries N] COMMAND TEMPLATE...

Start a server for running COMMAND instances using arguments defined using TEMPLATE.

pqueue send [-h|--help] [-V|--version] [-n|--name NAME] ARGS...

Send task to a server. The placeholders in server's argument template will be filled in from ARGS.

pqueue stop [-h|--help] [-V|--version] [-n|--name NAME]

Stop a server. If the server is currently executing a task it will be stopped after the current task finishes.

pqueue has [-h|--help] [-V|--version] [-n|--name NAME]

Check if a server exists. Returns a non-zero exit code if the server does not exist.

Templates

When a pqueue server is started, a program argument template can be specified. Template is a list of program arguments and one or more "placeholders", that can be filled in by the sender. In the argument templates, {} specifies a placeholder. The placeholders will be replaced with the arguments specified with the send sub-command.

Examples

The pqueue server can be started with the server sub-command. In this example, we start a pqueue server that will execute echo with two arguments, "Hello" and one supplied by the sender.

pqueue server echo Hello {}

Once the server is listening, we can start sending in tasks. For example, let's greet the world by running:

pqueue send world

We can see that the string "Hello world" got printed in the terminal where the server is running. The server will keep listening for new tasks, if we now execute:

pqueue send "John Doe"

We will see "Hello John Doe" printed as expected.

Where pqueue comes in handy is when dealing with long running tasks. Since the tasks are queued one can send in new a task even if the server is still executing an earlier program. All the tasks are stored in a queue and executed sequentially on a first-come, first-served basis.

To demonstrate this, we can start a new server named "timers":

pqueue server -n timers sleep {}

After this, we can send in a bunch of tasks:

pqueue send -n timers 10
pqueue send -n timers 4
pqueue send -n timers 20

The tasks will execute one after another and new ones can be added even if the old ones are not finished.

A server can be stopped with the pqueue stop command. If a server receives a stop request while it is processing a task, it will first wait for the current task to finish before stopping. When a stop request is received, any queued tasks will be discarded.

Dependencies

process-queue uses DBus for IPC and needs libdbus 1.6 or higher.

Dependencies

~14MB
~280K SLoC