{"id":15373013,"url":"https://github.com/vi/scheduledexec","last_synced_at":"2025-07-14T00:38:48.487Z","repository":{"id":221425872,"uuid":"754343684","full_name":"vi/scheduledexec","owner":"vi","description":"Simple REST service that executes scenarios consisting of command lines with timestamps (at which the commands should be run).","archived":false,"fork":false,"pushed_at":"2024-02-07T21:53:46.000Z","size":19,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-17T15:04:53.225Z","etag":null,"topics":["command-line","remote-execution","rest","scenario","scheduler","subprocess"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/vi.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,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-07T21:31:17.000Z","updated_at":"2025-02-11T13:26:22.000Z","dependencies_parsed_at":"2024-02-07T22:47:16.422Z","dependency_job_id":"0d7f940e-ddda-457a-a068-52ecd43ba80e","html_url":"https://github.com/vi/scheduledexec","commit_stats":null,"previous_names":["vi/scheduledexec"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/vi/scheduledexec","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fscheduledexec","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fscheduledexec/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fscheduledexec/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fscheduledexec/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vi","download_url":"https://codeload.github.com/vi/scheduledexec/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vi%2Fscheduledexec/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265228228,"owners_count":23731068,"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":["command-line","remote-execution","rest","scenario","scheduler","subprocess"],"created_at":"2024-10-01T13:54:05.554Z","updated_at":"2025-07-14T00:38:48.466Z","avatar_url":"https://github.com/vi.png","language":"Rust","readme":"# scheduledexec\n\nREST service to execute command lines at appropriate moments using POST requests and monitor status of those commands.\n\n## Features\n\n* Executing command lines supplied by REST client at relative moments of time specified in the scenario\n* Collecting and reporting outputs and timing of the commands\n* Ability to prepend a program name to the command line array (to avoid giving access to the whole shell)\n* Flexible server socket listening options (e.g. UNIX socket or systemd socket-initation)\n\n## Limitations\n\n* No support for non-UTF8 command line chunks or outputs\n* Unsuccessful commands abort scenarios\n* If command takes too long to execute and scheduledexec missed the next command, scenario is also aborted error\n\n## Documentation\n\nHere is a short list of endpoints:\n\n```\n/start - begin executing a scenario\n/abort - abort currenty executed scenario\n/status - query information\n/monitor - subscribe to events     \n/getscenario - get current or last scenario\n/report - download final scenario report\n```\n\nYou can use OpenAPI editor like [Swagger](https://editor.swagger.io/) with a [pre-built openapi.json](openapi.json) file to see the documentation.\n\n\n## Example\n\n```\n$ cargo run  -- 127.0.0.1:1234\n$ curl http://127.0.0.1:1234/status; echo\n{\"status\":\"Idle\"}\n$ curl -H 'Content-Type: application/json' -d @scenario_sample.json -s http://127.0.0.1:1234/start\n$ curl http://127.0.0.1:1234/status; echo\n{\"status\":\"Completed\"}\n$ curl http://127.0.0.1:1234/report; echo\n{\"error\":false,\"aborted\":false,\"entries\":[{\"out\":\"Wed Feb  7 22:44:24 CET 2024\\n\",\"err\":\"\",\"exitcode\":0,\"timespan_ms\":3},...]}\n```\n\n## Installation\n\nDownload a pre-built executable from [Github releases](https://github.com/vi/scheduledexec/releases) or install from source code with `cargo install --path .`  or `cargo install scheduledexec`.\n\n## CLI options\n\n\u003cdetails\u003e\u003csummary\u003e scheduledexec --help output\u003c/summary\u003e\n\n```\nREST service to execute series of command lines at specific moments of time\n\nUsage: \n\nArguments:\n  \u003cLISTEN_ADDRESS\u003e\n          Socket address to listen for incoming connections.\n          \n          Various types of addresses are supported:\n          \n          * TCP socket address and port, like 127.0.0.1:8080 or [::]:80\n          \n          * UNIX socket path like /tmp/mysock or Linux abstract address like @abstract\n          \n          * Special keyword \"inetd\" for serving one connection from stdin/stdout\n          \n          * Special keyword \"sd-listen\" or \"sd-listen-unix\" to accept connections from file descriptor 3 (e.g. systemd socket activation)\n\n  [PREFIX]\n          Prepend this command to all executed chunks\n\nOptions:\n      --unix-listen-unlink\n          remove UNIX socket prior to binding to it\n\n      --unix-listen-chmod \u003cUNIX_LISTEN_CHMOD\u003e\n          change filesystem mode of the newly bound UNIX socket to `owner`, `group` or `everybody`\n\n      --unix-listen-uid \u003cUNIX_LISTEN_UID\u003e\n          change owner user of the newly bound UNIX socket to this numeric uid\n\n      --unix-listen-gid \u003cUNIX_LISTEN_GID\u003e\n          change owner group of the newly bound UNIX socket to this numeric uid\n\n      --sd-accept-ignore-environment\n          ignore environment variables like LISTEN_PID or LISTEN_FDS and unconditionally use file descritor `3` as a socket in sd-listen or sd-listen-unix modes\n\n      --tcp-keepalive \u003cTCP_KEEPALIVE\u003e\n          set SO_KEEPALIVE settings for each accepted TCP connection.\n          \n          Value is a colon-separated triplet of time_ms:count:interval_ms, each of which is optional.\n\n      --tcp-reuse-port\n          Try to set SO_REUSEPORT, so that multiple processes can accept connections from the same port in a round-robin fashion\n\n      --recv-buffer-size \u003cRECV_BUFFER_SIZE\u003e\n          Set socket's SO_RCVBUF value\n\n      --send-buffer-size \u003cSEND_BUFFER_SIZE\u003e\n          Set socket's SO_SNDBUF value\n\n      --tcp-only-v6\n          Set socket's IPV6_V6ONLY to true, to avoid receiving IPv4 connections on IPv6 socket\n\n      --tcp-listen-backlog \u003cTCP_LISTEN_BACKLOG\u003e\n          Maximum number of pending unaccepted connections\n\n  -h, --help\n          Print help (see a summary with '-h')\n```\n\u003c/details\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fscheduledexec","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvi%2Fscheduledexec","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvi%2Fscheduledexec/lists"}