{"id":28396974,"url":"https://github.com/hroptatyr/echse","last_synced_at":"2025-09-01T02:43:26.893Z","repository":{"id":6953105,"uuid":"8205039","full_name":"hroptatyr/echse","owner":"hroptatyr","description":"A cron daemon on RFC 5545 (ical) files.","archived":false,"fork":false,"pushed_at":"2024-05-27T10:27:37.000Z","size":1959,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-27T13:39:58.209Z","etag":null,"topics":["c","cron-daemon","ical","rfc-5545"],"latest_commit_sha":null,"homepage":"http://www.fresse.org/echse/","language":"C","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/hroptatyr.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-02-14T18:29:33.000Z","updated_at":"2024-07-04T09:51:27.000Z","dependencies_parsed_at":"2022-08-26T07:12:04.035Z","dependency_job_id":null,"html_url":"https://github.com/hroptatyr/echse","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/hroptatyr/echse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hroptatyr%2Fechse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hroptatyr%2Fechse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hroptatyr%2Fechse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hroptatyr%2Fechse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hroptatyr","download_url":"https://codeload.github.com/hroptatyr/echse/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hroptatyr%2Fechse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273067844,"owners_count":25039908,"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-09-01T02:00:09.058Z","response_time":120,"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":["c","cron-daemon","ical","rfc-5545"],"created_at":"2025-05-31T23:39:04.017Z","updated_at":"2025-09-01T02:43:26.887Z","avatar_url":"https://github.com/hroptatyr.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"echse\n=====\n\nIn a nutshell: a cron daemon on [RFC 5545][1] calendar files\n(aka iCalendar aka ics) with execution resolution up to one second,\nper-task configuration of everything, and which can be run in\ndaemon mode by any user.\n\n\nFeatures\n--------\n\n* [X] Tasks can be run with second precision\n* [X] More flexible recurrence (anything ical RRULEs can express)\n* [X] Per-task configuration of mail\n* [X] Per-task configuration of working directory and shell\n* [X] Per-task configuration of simultaneity\n* [X] Automatic and shell-independent capture of timing information\n* [X] Per-task configuration of timezones\n* [X] Built-in timeouts by constraining a task through DTEND\n* [X] Built-in timeouts by constraining a task through DURATION\n* [X] Custom task templates\n* [X] Job metadata logging as VJOURNAL\n* [ ] Per-task configuration of the environment\n\n\nRed tape\n--------\n\n+ licence: [BSD3c][2]\n+ github: \u003chttps://github.com/hroptatyr/echse\u003e\n+ issues: \u003chttps://github.com/hroptatyr/echse/issues\u003e\n+ releases: \u003chttps://github.com/hroptatyr/echse/releases\u003e\n\nThe [beef branch][4] contains iCal files for holidays and trading hours\nlicensed under [CC BY 3.0][3].\n\n\niCalendar extensions\n--------------------\n\nWhile one of echse' objectives is to define recurring events in a\nwidely-adopted format (for obvious reasons of interoperability),\nanother, even more important objective is to concisely and accurately\nexpress a task's surroundings.\n\n[RFC 5545][1] comes preloaded with oodles of fields and syntax to\ndescribe calendar events, how to display them in a PIM application, who\nthey affect and how and when and whatnot.  Needless to say that's not\nenough for an automated task executor.\n\nThe following list maps RFC 5545 fields into our problem domain:\n\nSUMMARY\n: Conveys the command line to execute.\n\nORGANIZER\n: Specifies from whom sent mails appear to be.\n\nATTENDEE\n: Specifies to whom mail output is sent.\n\nDTSTART\n: Start date/time of the job.\n\nDTEND\n: If the job is still running by then kill it.\n\nDURATION\n: Another way to express the time limit on a job.\n\nLOCATION\n: Run the job with the working directory set to this.\n\nX-ECHS-SHELL\n: Execute the command line through this shell (must support `-c CMD`).\n\nX-ECHS-IFILE\n: Pass this file to the command as stdin.\n\nX-ECHS-OFILE\n: Write any output on stdout into this file.\n\nX-ECHS-EFILE\n: Write any output on stderr into this file.\n\nX-ECHS-MAIL-OUT\n: If set to non-0 any output written on stdout is included in the mail.\n\nX-ECHS-MAIL-ERR\n: If set to non-0 any output written on stderr is included in the mail.\n\nX-ECHS-MAIL-RUN\n: If set to non-0 send a mail with the status information, this flag is\n  implied when X-ECHS-MAIL-OUT or X-ECHS-MAIL-ERR is set.\n\nX-ECHS-MAX-SIMUL\n: A job is only run this many times simultaneously.\n\nAlso, [RFC 5545][1] RRULEs are powerful but yet not powerful enough to\ncapture common recurrences such as Easter, or too verbose to capture\nrecurrences like the weekday after the fourth Sunday every month (which\nis either the fourth or fifth Monday or the first Monday of the\nfollowing month).\n\nFor that matter, we decided to extend RFC 5545 by additional RRULE\nparts:\n\n+ `BYEASTER=N[,...]`  for N in 0 to 366 or -1 to -366, denotes the N-th\n  day after/before easter\n+ `SHIFT=N[B]`  for N in 0 to 366 or -1 to -366, denotes to add N\n  ([B]usiness) days to all dates in the current set, -0B is allowed and\n  means to go back to Friday if the date is on Saturday or Sunday \n+ `SCALE=GREGORIAN|HIJRI` to change the calendar scale for RRULES.\n  Note: The *output* calendar scale is `GREGORIAN` as per [RFC 5545][1].\n\n\nPronunciation\n-------------\n\nechse rhymes with *hexe*, however that is pronounced in your language.\n\n\nSimilar Projects\n================\n\nNone.\n\n\n  [1]: http://tools.ietf.org/html/rfc5545\n  [2]: http://tldrlegal.com/license/bsd-3-clause-license-%28revised%29\n  [3]: http://creativecommons.org/licenses/by/3.0/\n  [4]: http://github.com/hroptatyr/echse/tree/beef\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhroptatyr%2Fechse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhroptatyr%2Fechse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhroptatyr%2Fechse/lists"}