cmdstalk
Cmdstalk is a unix-process-based beanstalkd queue broker.
Written in Go, cmdstalk uses the kr/beanstalk
library to interact with the beanstalkd queue daemon.
Each job is passed as stdin to a new instance of the configured worker command.
On exit(0)
the job is deleted. On exit(1)
(or any non-zero status) the job
is released with an exponential-backoff delay (releases^4), up to 10 times.
If the worker has not finished by the time the job TTR is reached, the worker
is killed (SIGTERM, SIGKILL) and the job is allowed to time out. When the
job is subsequently reserved, the timeouts: 1
will cause it to be buried.
In this way, job workers can be arbitrary commands, and queue semantics are
reduced down to basic unix concepts of exit status and signals.
Install
From source:
go get github.com/99designs/cmdstalk
From binary:
Usage
cmdstalk -help
cmdstalk -cmd="/path/to/your/worker --your=flags --here" -tubes="one,two,three"
cmdstalk -all -cmd="cat" -per-tube=4
Dev
gpm is used to track dependencies. Make sure
you have a sane $GOPATH
etc, then brew install gpm
and gpm install
.
go test ./...
(cd broker && go test -v)
go run cmdstalk.go -cmd='hexdump -C' -tubes="default,another"
go build
file cmdstalk
TODO
- Graceful shutdown.
- SIGKILL recalcitrant worker processes.
- Handle stdout.
- Ship linux binary; GitHub releases?