{"id":19156304,"url":"https://github.com/ess/cronenberg","last_synced_at":"2025-05-07T07:42:46.035Z","repository":{"id":57573189,"uuid":"171748471","full_name":"ess/cronenberg","owner":"ess","description":"It's like cron, but kinda twisted","archived":false,"fork":false,"pushed_at":"2019-02-22T10:21:24.000Z","size":1383,"stargazers_count":12,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-04-19T20:16:59.879Z","etag":null,"topics":["12-factor","cron","go","golang","userland"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ess.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-20T21:00:32.000Z","updated_at":"2025-03-31T17:46:11.000Z","dependencies_parsed_at":"2022-09-10T17:41:02.098Z","dependency_job_id":null,"html_url":"https://github.com/ess/cronenberg","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ess%2Fcronenberg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ess%2Fcronenberg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ess%2Fcronenberg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ess%2Fcronenberg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ess","download_url":"https://codeload.github.com/ess/cronenberg/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252836918,"owners_count":21811804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["12-factor","cron","go","golang","userland"],"created_at":"2024-11-09T08:34:03.039Z","updated_at":"2025-05-07T07:42:46.009Z","avatar_url":"https://github.com/ess.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cronenberg #\n\n[![Build Status](https://travis-ci.org/ess/cronenberg.svg?branch=master)](https://travis-ci.org/ess/cronenberg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/ess/cronenberg)](https://goreportcard.com/report/github.com/ess/cronenberg)\n[![Documentation](https://godoc.org/github.com/ess/cronenberg?status.svg)](http://godoc.org/github.com/ess/cronenberg)\n\nIt's like cron, but kinda twisted.\n\n## Installation ##\n\nYou can either download the appropriate release from the [releases page](https://github.com/ess/cronenberg/releases) or install via `go get`:\n\n```\ngo get -u github.com/ess/cronenberg/cmd/cronenberg\n```\n\n## Basics ##\n\nCronenberg works similarly to the standard `cron` that you already know and love, but with a few differences:\n\n* It is not meant to be run as a system service\n* It does not use a traditional crontab\n* Jobs for a given `cronenberg` instance are loaded from a YAML file\n* It supports locking jobs (jobs that can only ever have one running instance)\n* It logs to STDOUT\n* It supports both incoming (from the system) and job-scoped environment variables\n\nIn short, this is the `cron` implementation that you run along side your 12-factor application.\n\n### Jobs File ###\n\nThere is not a hard-coded location for your jobs file. Instead, you pass the jobs file as the first argument to the `cronenberg` command like so:\n\n```\ncronenberg /path/to/my/jobs/file.yml\n```\n\nThis is just a YAML file containing an array of Job objects. Here's an example jobs file:\n\n```yaml\n# Job objects require a name, a command, and a schedule (when). You can also\n# specify a description, whether or not the job locks, and a hash of environment\n# variables for the job.\n\n# This is just a normal job that runs every minute\n- name: what-am-i\n  command: echo \"I am a command\"\n  when: \"* * * * *\"\n\n# This is a locking job that is scheduled to run every minute so long as there\n# is not already an instance of the job in progress.\n- name: picky-picky\n  command: 'echo \"I am a picky command\" ; sleep 70'\n  when: \"* * * * *\"\n  lock: true\n\n# This is a job that runs every five minutes and specifies an environment\n# variable. If this variable is also set in cronenberg's executing shell, the\n# value configured here takes precedence.\n- name: know-your-environment\n  command: echo $flibberty\n  when: \"*/5 * * * *\"\n  env:\n    flibberty: gibbets\n```\n\n## History ##\n\n* v1.0.0 - Initial Release\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fess%2Fcronenberg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fess%2Fcronenberg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fess%2Fcronenberg/lists"}