{"id":22505170,"url":"https://github.com/azer/shell-jobs","last_synced_at":"2025-08-03T11:32:47.156Z","repository":{"id":7643309,"uuid":"9003678","full_name":"azer/shell-jobs","owner":"azer","description":"Human-friendly Cron replacement in NodeJS","archived":false,"fork":false,"pushed_at":"2013-05-21T05:57:21.000Z","size":164,"stargazers_count":95,"open_issues_count":0,"forks_count":6,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-02T07:45:22.881Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-03-25T10:26:16.000Z","updated_at":"2024-09-14T09:26:44.000Z","dependencies_parsed_at":"2022-09-06T22:21:32.556Z","dependency_job_id":null,"html_url":"https://github.com/azer/shell-jobs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/azer/shell-jobs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azer%2Fshell-jobs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azer%2Fshell-jobs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azer%2Fshell-jobs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azer%2Fshell-jobs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azer","download_url":"https://codeload.github.com/azer/shell-jobs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azer%2Fshell-jobs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268537859,"owners_count":24266274,"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","status":"online","status_checked_at":"2025-08-03T02:00:12.545Z","response_time":2577,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-12-07T00:15:37.215Z","updated_at":"2025-08-03T11:32:46.861Z","avatar_url":"https://github.com/azer.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## shell-jobs\n\nHuman-friendly Cron replacement in NodeJS, based on [english-time](https://github.com/azer/english-time). \n\n`.jobs` files look like this;\n\n```bash\necho `date '+%d %h %H:%M'` \u003e /tmp/now # =\u003e 1 second\necho \"Good Morning\" # =\u003e every 6am\necho \"Hello World\" # =\u003e 5 seconds, 200 milliseconds\necho \"CATS\" # =\u003e every 4 hours and 15 minutes\necho \"YO\" # =\u003e from tomorrow 6am, every 1h + 5 mins\n```\n\nAnd runs like this;\n\n![](https://dl.dropbox.com/s/ld9s6cpjy3lwbb6/shell-jobs.png)\n\n*Looking for a handier simple tool? Try: [run-after](http://github.com/azer/run-after)*\n\n## Install\n\n```bash\n$ npm install -g shell-jobs\n```\n\n## Usage\n\nCreate a new file and call it `new.jobs`\n\n```bash\necho \"every 3.5 hours\" \u003e\u003e /tmp/logs  # =\u003e 3 hours 30 seconds\necho \"every 5 minutes\" \u003e\u003e /tmp/logs  # =\u003e 5 minutes\necho \"good morning sir!\"             # comments here are ok. =\u003e 8am\necho \"every 4 weeks\" \u003e\u003e /tmp/logs    # =\u003e 4 weeks\n```\n\nThen run it;\n\n```bash\n$ shell-jobs new.jobs # globbing enabled\n```\n\nProcess outputs are hidden by default. Use `--out` to print the stdout of certain jobs;\n\n```bash\n$ shell-jobs new.jobs -o 3 # will be printing the stdout of the third job 'echo \"this is a new day!\"'\n```\n\nWanna run it as a daemon on the background?\n\n```bash\n$ shell-jobs new.jobs -d\n```\n\n## Debugging\n\nTo investigate how shell-jobs parses your document, run `-c` option:\n\n```bash\n$ shell-jobs new.jobs -c\n```\n\nIt'll list all commands with parsed schedulings and delay times.\n\nTo let shell-jobs output all the logs:\n\n```bash\nDEBUG=* shell-jobs new.jobs\n```\n\n## Manual\n\n```\n\n    USAGE\n\n        shell-jobs [files] [options]\n\n    OPTIONS\n\n        -d    --daemon     Run as daemon on the background.\n        -s    --stop       Stop the running daemon.\n        -c    --confirm    Make sure if given jobs parsed correctly.\n        -o    --out        Show outputs from the commands at specified index(es). e.g -o 0, 2, 3\n        -v    --version    Show version and exit\n        -h    --help       Show help and exit\n\n```\n\n## List of Recognized Time Units\n\n**Milliseconds**\n\n* ms\n* millisec\n* millisecs\n* milliseconds\n* millisecond\n\n**Second(s)**\n\n* s\n* sec\n* secs\n* seconds\n* second\n\n**Minute(s)**\n\n* m\n* min\n* mins\n* minute\n* minutes\n\n**Hour(s)**\n\n* h\n* hour\n* hours\n\n**Day(s)**\n\n* d\n* day\n* days\n\n**Week(s)**\n\n* w\n* week\n* weeks\n\n![](http://distilleryimage4.s3.amazonaws.com/564cccc2831b11e28f3922000aaa2151_6.jpg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazer%2Fshell-jobs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazer%2Fshell-jobs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazer%2Fshell-jobs/lists"}