{"id":37154392,"url":"https://github.com/kanocz/minisv","last_synced_at":"2026-01-14T18:12:46.426Z","repository":{"id":57584961,"uuid":"65681488","full_name":"kanocz/minisv","owner":"kanocz","description":"Simple supervisor for easy multi-binary service deploy","archived":false,"fork":false,"pushed_at":"2025-04-13T10:00:43.000Z","size":71,"stargazers_count":34,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-13T11:18:59.614Z","etag":null,"topics":["docker","golang","supervisor"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kanocz.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-08-14T18:50:55.000Z","updated_at":"2025-04-13T10:00:46.000Z","dependencies_parsed_at":"2024-06-20T03:20:29.919Z","dependency_job_id":"fdc1324a-5dad-498a-ad49-6871abcca55b","html_url":"https://github.com/kanocz/minisv","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/kanocz/minisv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kanocz%2Fminisv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kanocz%2Fminisv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kanocz%2Fminisv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kanocz%2Fminisv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kanocz","download_url":"https://codeload.github.com/kanocz/minisv/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kanocz%2Fminisv/sbom","scorecard":{"id":549369,"data":{"date":"2025-08-11","repo":{"name":"github.com/kanocz/minisv","commit":"0a9095b96902f1bab3763a5bc376b1111a305db7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:22.04 to ubuntu:22.04@sha256:1aa979d85661c488ce030ac292876cf6ed04535d3a237e49f61542d8e5de5ae0","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3770","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T10:22:47.753Z","repository_id":57584961,"created_at":"2025-08-20T10:22:47.753Z","updated_at":"2025-08-20T10:22:47.753Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28429961,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T16:38:47.836Z","status":"ssl_error","status_checked_at":"2026-01-14T16:34:59.695Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","golang","supervisor"],"created_at":"2026-01-14T18:12:45.629Z","updated_at":"2026-01-14T18:12:46.419Z","avatar_url":"https://github.com/kanocz.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# minisv (mini supervisor)\n\nService starter, easy start multiply services (for example in one docker\ncontainer or using systemd on regular system) with possibility to (gracefull)\nrestart them via http. Gracefull restart is used for services supporting\nSO_REUSERPORT: new instance will started, waited X seconds to be sure that\neverything is ok and only then SIGTERM will be send to old one; if old one\nwill not exit in Y time than SIGKILL also sent.\n\nIt's also possible to run \"one-time\" actions like a repository pull one\nwebhook and so on (need to have `oneTime` setted to `true`).\n\nIn last version it's possible to pass data on standart input of \"one-time\"\ntasks (using *POST* method), for example, for creating configs before\nadding new tasks.\n\nPossibility to \"rotate\" logs using HUP signal, using `logreload` variable\nin config or `rotate` command via http. Using `logdate` it's possible to\nadd current date/time as log file name sufix (using class golang format).\nThis affects only permanent task, not `oneTime`.\n\nAlso is possible to add/remove tasks online via HTTP-requests.\n\nFor restarting, sending signals and task add/remove next http schema used:\n\n- *GET* `http://[addr]:[port]/` (return basic status on all tasks)\n- *GET* `http://[addr]:[port]/[taskname]/[stop|restart|term|hup|kill|run|rotate]`\n- *POST* `http://[addr]:[port]/[taskname]/run` (run one-time task with data on standart input)\n- *POST* `http://[addr]:[port]/[taskname]` (with json description of task as http body)  \n- *DELETE* `http://[addr]:[port]/[taskname]`\n\nfor example:\n\n```bash\ncurl -d '{\"command\": \"/bin/sleep\",\"args\": [\"1800\"],\"workdir\": \"/home\"}' -H \"Content-Type: application/json\" -X 'POST' 'http://127.0.0.1:3443/sleep1800'\ncurl -i 'http://127.0.0.1:3443/sleep1800/kill'\ncurl -i 'http://127.0.0.1:3443/sleep1800/restart'\ncurl -X 'DELETE' 'http://127.0.0.1:3443/sleep3'\ncurl -i 'http://127.0.0.1:3443/pull/run'\ncurl -i -X 'POST' -d '@/tmp/image.jpeg' 'http://127.0.0.1:3443/imgsave/run'\n```\n\nExample *Dockerfile* for use with minisv:\n\n```Dockerfile\nFROM ubuntu:16.04\nMAINTAINER somebody@service\n\nRUN apt-get update \u0026\u0026 apt-get install -y nginx-light redis-server\nRUN mkdir -p /var/log/nginx /var/log/minisv /opt\n\nCOPY minisv /opt\nCOPY minisv.json /opt\n\nEXPOSE 80 443 3443 6379\nENTRYPOINT [\"/opt/minisv\"]\n```\n\nwhile minisv.json contains\n\n```json\n{\n    \"logdir\": \"/var/log/minisv\",\n    \"logfileprefix\": \"container1-\",\n    \"logreopen\": \"1h\",\n    \"logsuffixdate\": \"20060102.150405\",\n    \"logdate\": \"2006/01/02 15:04:05\",\n    \"tasks\": {\n        \"redis\": {\n            \"command\": \"/usr/bin/redis-server\",\n            \"args\": [\"--port\", \"6379\"],\n            \"workdir\": \"/tmp\",\n            \"wait\": 60,\n            \"restartPause\":1,\n            \"startTime\": 10\n        },\n        \"nginx\": {\n            \"command\": \"/usr/sbin/nginx\",\n            \"args\": [\"-g\", \"daemon off;\"],\n            \"wait\": 60,\n            \"restartPause\":0,\n            \"startTime\": 3\n        },\n        \"pull\": {\n            \"command\": \"/usr/bin/git\",\n            \"args\": [\"pull\", \"-f\"],\n            \"workdir\": \"/home/www/example.com\",\n            \"oneTime\": true\n        }\n    },\n    \"http\": {\n        \"address\": \"127.0.0.1\",\n        \"port\": 3443\n    }\n}\n```\n\nstarting with\n\n```bash\ndocker run -v '/var/log/minisv:/var/log/minisv' 'container1'\n```\n\nusing different *logfileprefix* prevents mixing of logs from different containers\n\ncommands description:\n\n* *stop* - stop task until *restart* or *run* command\n* *restart* - start after *stop* OR _graceful restart_ if running (start new instance, wait if not crashed and then terminate old one), not for _ontime_ tasks\n* *term* - send SIGTERM to process\n* *hup* - send SIGHUP to process\n* *kill* - send SIGKILL to process\n* *run* - run _onetime_ task\n* *rotate* - close log and reopen (with different name while _logsuffixdate_ is used), not for _onetime_ tasks\n* *status* - return current process status\n\n\n## HTTPS \u0026 Auth\n\nif no user, password and certificate parameters are specified in config _minisv_ will work with plain HTTP and no authentification (suitable for listening on localhost and no access of third people to server).\n\nIf user and password (bcrypted hash) specified in http session http-basic auth is on.\n```json\n\"http\": {\n        \"address\": \"0.0.0.0\",\n        \"port\": 3443,\n        \"user\": \"admin\",\n        \"password\": \"$2a$14$ajq8Q7fbtA0QvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK\"\n    }\n```\n\nFor more security it's possible to turn on HTTPS:\n```json\n\"http\": {\n        \"address\": \"0.0.0.0\",\n        \"port\": 3443,\n        \"user\": \"admin\",\n        \"password\": \"$2a$14$ajq8Q7fbtA0QvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK\",\n        \"servercert\": \"server.crt\",\n        \"serverkey\": \"server.key\"\n    }\n```\n\nAnd as most-secure it's possible to turn on verifing of client certificate:\n\n```json\n\"http\": {\n        \"address\": \"0.0.0.0\",\n        \"port\": 3443,\n        \"user\": \"admin\",\n        \"password\": \"$2a$14$ajq8Q7fbtA0QvXpdCq7Jcuy.Rx1h/L4J60Otx.gyNLbAYctGMJ9tK\",\n        \"servercert\": \"server.crt\",\n        \"serverkey\": \"server.key\",\n        \"clientcert\": \"client.crt\"\n    }\n```\n\nand yes, it's true - it's possible combinate https-client-auth with http-basic-auth in the same time and both will be required at once.\n\n## Resource limits\n\nit's possible to set global limits (like calling ulimit just before minisv) by setting individual options on `limits` array like this:\n```json\n\n{\n    \"logdir\": \"/var/log/minisv\",\n    \"limits\": [\n        {\n            \"type\": \"nofile\",\n            \"cur\":  2048,\n            \"max\":  4096\n        },\n        {\n            \"type\": \"nproc\",\n            \"cur\":  16384,\n            \"max\":  16384\n        }\n    ],\n    \"tasks\": {\n        ......\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanocz%2Fminisv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkanocz%2Fminisv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkanocz%2Fminisv/lists"}