Show HN: Dcron – Distributed, fault tolerant job scheduling system
dcron.io
dcron.io
Need more time to see if this will be necessary.
https://github.com/victorcoder/dcron
Fusing both would be AWESOME (I'd even like to help).
What Dcron gets right:
- Distributed by design
- Raft for the reliable parts, gossip for lightweight sync, a match made in heaven
- Linux mentality
- Dashboard included
- Good docs, nice website, looks serious
What Kala gets right:
- Built much more directly after Chronos, which has an amazing and battle tested API
- Using ISO durations instead of NIHing their own format
- Dependent jobs
However since Metafora is written as a Go library and provides a statemachine implementation for task handlers to use, it requires writing your distributed tasks in Go.
At this point I don't need my jobs to be distributed, I'm just looking for a way to keep track of them all and visualize characteristics of the job (start time, length, successful, etc). Ideally, I'd have a way to re-run the job within the UI.
If you're open to a hosted solution, check out IronWorker: http://www.iron.io/worker
It's an async task processing service with a built-in job scheduler. You can upload your python scripts to Iron.io, then set schedules and other triggers to execute on-demand. We have a dashboard to manage tasks and schedules, see what ran and what failed, and you can visualize the characteristics you're looking for. We do distribute the workloads for you, but sounds like it could be a good fit.
I've been tinkering with this concept recently, it's not quite ready for beta testing, but I'd be happy to take feedback on what I've got so far: http://croncloud.io/
The "command" field is the most important part. What you put there gets executed like this by their agent (on Linux): /bin/sh -c <your_scheduled_command_name>
But I think this also means you have to copy every job executable to every server that might have a chance of running the job.
[0] https://github.com/victorcoder/dcron/blob/master/job.json
For example:
POST /scripts --data 'node /home/node/myJob.js'
That returns a script id { "script_id": "507f1f77bcf86cd799439011" }Then:
POST /jobs --data '{
"name":"cron_job",
"schedule":"@every 2s",
"script": "507f1f77bcf86cd799439011",
"owner":"foo",
"owner_email":"foo@bar.com"
}'
This way you don't have to manage/create the scripts on each node manually.