faktory_cron
faktory_cron copied to clipboard
Unofficial cron / scheduling service for Faktory
Unofficial Faktory Cron Scheduler
faktory-cron is a simple tool to send jobs to a Faktory work server on a repeating schedule, with a cron like syntax.
Installation
faktory-cron is a single binary, download the latest version for Linux, macOS or Windows.
Usage
A config file (crontab.yaml) provides a list of jobs and the schedule they should run on. For example:
faktory: tcp://localhost:7419
jobs:
- job: test
schedule: "@every 30s"
args:
- test
- job: test
schedule: 5 * * * *
args:
- 1
- 2
retries: 1
queue: default
priority: 5
To run your jobs on these schedules, point faktory-cron at the file:
$ ./faktory-cron -config path/to/crontab.yaml
If you have a file called crontab.yaml in the current directory, then you can skip the -config option.
Job options
These are the configuration options for each job:
| Setting | Required | Description |
|---|---|---|
| job | ✓ | The name of the job, as registered with Faktory |
| schedule | ✓ | See below |
| args | ✓ | A list of arguments to send to the job |
| retries | ✗ | Number of times Faktory will retry the job (if it fails) |
| queue | ✗ | The queue in which this job should be placed. Will be placed in the default queue if not supplied. |
| priority | ✗ | Can be between 1 and 9. Defaults to 5, jobs with a higher priority will skip the queue. |
Cron syntax
See this link for a full reference, but in short:
| Field name | Mandatory? | Allowed values | Allowed special characters |
|---|---|---|---|
| Seconds | Yes | 0-59 | * / , - |
| Minutes | Yes | 0-59 | * / , - |
| Hours | Yes | 0-23 | * / , - |
| Day of month | Yes | 1-31 | * / , - ? |
| Month | Yes | 1-12 or JAN-DEC | * / , - |
| Day of week | Yes | 0-6 or SUN-SAT | * / , - ? |
Interval syntax
Interal jobs may be defined by using @every, as in:
@every 30m
or
@every 30s
You may also use @daily, @hourly, @weekly, @monthly and so on.
Connecting to Faktory
If the faktory setting isn't in the config file, then faktory-cron will use the FAKTORY_URL environment variable.
Connections are made lazily, so if you restart Faktory then you don't need to restart faktory-cron.
Docker
There is a Docker container at cdrx/faktory-cron, you can use it like this:
docker run -v path/to/crontab.yaml:/crontab.yaml -e FAKTORY_URL=tcp://:password@faktory:7419 cdrx/faktory-cron
You'll need to supply it a config file with the schedules and point it at faktory so it can queue the jobs.
Limitations
If you run more than one copy of faktory-cron from the same config file, then tasks will be duplicated. Only run one copy of the service at a time.
Faktory doesn't provide any mechanism (yet) to check if a job has finished. If your job doesn't finish before the next one is scheduled, it will start two copies of the job.
Contributing
Contributions welcome, particularly for things from this list:
- [ ] Tests
- [ ] Live reloading if the config file changes
- [ ] Supporting multiple configuration files in a folder, possibly with cron like folders (ala
/etc/cron/daily.d) - [ ] Documentation
History
0.5 - 2017-11-28
First release, works for me. Feedback would be appreciated.
License
BSD, see the LICENSE file.