{"id":19634096,"url":"https://github.com/raforg/noexcuses","last_synced_at":"2025-07-12T04:34:05.790Z","repository":{"id":149946609,"uuid":"311314048","full_name":"raforg/noexcuses","owner":"raforg","description":"runs important cronjobs until they succeed","archived":false,"fork":false,"pushed_at":"2023-08-30T13:49:38.000Z","size":69,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-26T21:28:38.618Z","etag":null,"topics":["cli","cron","cronjob","cronjobs","crontab","crontabs","perl"],"latest_commit_sha":null,"homepage":"http://raf.org/noexcuses","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raforg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-09T11:16:04.000Z","updated_at":"2023-03-20T02:10:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"b6fab937-8db9-4666-8e55-0ee8fe78bb1b","html_url":"https://github.com/raforg/noexcuses","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/raforg/noexcuses","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raforg%2Fnoexcuses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raforg%2Fnoexcuses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raforg%2Fnoexcuses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raforg%2Fnoexcuses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raforg","download_url":"https://codeload.github.com/raforg/noexcuses/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raforg%2Fnoexcuses/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264939220,"owners_count":23686204,"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":["cli","cron","cronjob","cronjobs","crontab","crontabs","perl"],"created_at":"2024-11-11T12:19:32.525Z","updated_at":"2025-07-12T04:34:05.453Z","avatar_url":"https://github.com/raforg.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README\n\n*noexcuses* - runs important cronjobs until they succeed\n\n# Description\n\nSometimes cronjobs fail to run successfully because a required server (like\na database or FTP server) is temporarily unavailable due to power failures,\nhardware failures, software failures, network outages, choice of operating\nsystem, pilot error, and the like.\n\nTypically, this results in someone being forced to examine crontabs and\nerror reports, determine which cronjobs really need to be run, and then run\nthem manually. This happened to me twice in one week. I don't want it to\nhappen again. Cronjobs are meant to be automated and I want them to stay\nthat way.\n\nThis is the rationale for *noexcuses*. It keeps track of cronjobs that have\nfailed and keeps running them until they succeed. All you have to do is look\nat your crontabs, identify the cronjobs-that-must-succeed-no-matter-what and\ninsert `noexcuses` before the command.\n\nThen, when *cron* runs *noexcuses*, *noexcuses* will run the given cronjob.\nIf the cronjob fails, *noexcuses* becomes a daemon that will retry the\ncronjob regularly until it succeeds. Even if the cron host is rebooted\nbefore the cronjob succeeds, *noexcuses* lets you restart all of the\noutstanding cronjobs. Even if the cron host is down for a while, *noexcuses*\ncan tell you which cronjobs missed out on running while it was down and run\nthem. The initscript `noexcuses.init` can make this happen automatically at\nboot time.\n\nIn other words, *noexcuses* is a free, lightweight, fine-grained,\nunobtrusive, high-availability tool for cronjobs. Or rather, it's a\nhigh-recoverability tool for cronjobs which can either be incorporated into\na highly available system or used in the absence of one.\n\n*noexcuses* is freely available under the terms of the [GNU General Public\nLicense](https://www.gnu.org/licenses/), either version 2 of the License, or\n(at your option) any later version.\n\n# Features\n\n  * Retry failed cronjobs until they succeed\n  * List outstanding jobs\n  * Retry outstanding jobs now\n  * Cancel outstanding jobs\n  * Recover cronjobs missing due to downtime\n  * Adopt another cron host's outstanding jobs\n  * Forget jobs adopted by another host\n\n# Requirements\n\n*noexcuses* is written in Perl, and uses *pod2man* and *pod2html* which come\nwith Perl. It does not require any non-standard Perl modules. It does\nrequire a POSIX system and *cron*.\n\n# Documentation\n\nThere is a manual entry:\n\n  - [noexcuses(1)](http://raf.org/noexcuses/manpages/noexcuses.1.html) - the *noexcuses(1)* manpage\n\n--------------------------------------------------------------------------------\n\n    URL: http://raf.org/noexcuses\n    GIT: https://github.com/raforg/noexcuses\n    GIT: https://codeberg.org/raforg/noexcuses\n    Date: 20200625\n    Author: raf \u003craf@raf.org\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraforg%2Fnoexcuses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraforg%2Fnoexcuses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraforg%2Fnoexcuses/lists"}