A cron-style job scheduler for docker
ckron
is a versatile and straightforward tool to schedule operations on containerized applications.
ckron
is heavily inspired by ofelia but attempts to improve on it by allowing multiple tasks per job
. Using tasks
, you can compose complex workflows with a few off-the-shelf images and follow Docker's motto of one process per container.
If you have Node installed:
$ npm i -g ckron
If you only have Docker installed:
$ docker pull nicomt/ckron
If you installed it in Node:
$ ckron daemon --config /path/to/config.yml
If you installed it in Docker:
$ docker run --rm -it \
-v $PWD/config.yml:/etc/ckron/config.yml \
-v /var/run/docker.sock:/var/run/docker.sock \
nicomt/ckron daemon
NOTE: For production is recommended to use docker with a restart policy or create a service in something like systemd, upstart or forever. A service will ensure the daemon is restarted in case of an unexpected failure
The configuration consists of a YAML file, which is meant to have familiar docker compose
like syntax. The main sections of the config file are the following:
Single operations that can be carried out by a job. Tasks currently supported are:
run
: Runs a command inside of a new container, using a specific image.exec
: Runs a new command in a running containersignal
: Send a signal to the main process inside the container. Similar todocker kill --signal
See tasks reference for more documentation
Jobs are sets of tasks scheduled with a cron-like syntax. See jobs reference for more documentation
Notification channels for failed jobs. See notifiers reference for more documentation
Run with $ ckron daemon --config /path/to/config.yml
tasks:
test-01:
type: run
command: printenv
environment:
HELLO: World
image: ubuntu:latest
jobs:
job-01:
schedule: "*/30 * * * * *"
on_error: ["email-dev"]
run_on_init: true
tasks:
- test-01
notifiers:
email-dev:
type: email
smtp_host: smtp.server.com
smtp_port: 25
smtp_auth:
user: XXXXXXX
pass: XXXXXXX
to: [email protected]
from: '"Ckron Scheduler" <[email protected]>'