{"id":43311381,"url":"https://github.com/zlepper/gpm","last_synced_at":"2026-02-01T21:17:06.033Z","repository":{"id":85423291,"uuid":"100412357","full_name":"zlepper/gpm","owner":"zlepper","description":"A simple process manager","archived":false,"fork":false,"pushed_at":"2018-01-24T18:47:04.000Z","size":11,"stargazers_count":14,"open_issues_count":2,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-01T05:24:59.783Z","etag":null,"topics":["golang","linux","osx","process-manager","windows"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/zlepper.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":"2017-08-15T19:42:06.000Z","updated_at":"2025-08-06T08:49:11.000Z","dependencies_parsed_at":"2023-06-18T10:30:21.754Z","dependency_job_id":null,"html_url":"https://github.com/zlepper/gpm","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/zlepper/gpm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlepper%2Fgpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlepper%2Fgpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlepper%2Fgpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlepper%2Fgpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zlepper","download_url":"https://codeload.github.com/zlepper/gpm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zlepper%2Fgpm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28991588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T20:57:35.821Z","status":"ssl_error","status_checked_at":"2026-02-01T20:57:29.580Z","response_time":56,"last_error":"SSL_read: 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":["golang","linux","osx","process-manager","windows"],"created_at":"2026-02-01T21:17:05.290Z","updated_at":"2026-02-01T21:17:06.028Z","avatar_url":"https://github.com/zlepper.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GPM - The lightweight process manager\nGPM is an extremely lightweight process manager.  \nIt's easy to configure and has no external dependencies, making it an obvious choice for contains.  \nGPM runs on any Platform, not just Linux or Windows. \n\n## Features\nGPM comes with a pretty short list of core features:\n\n### Automatic restart\nAutomatically restart a process whenever it dies.\n\n### Inter-dependencies\nHave a setup script that needs to run before other process can run? \nJust have them depend on each other, and GPM will handle the rest\n\n\n### Graceful shutdown\nGPM will pass along interrupts, and give child processes a chance to shutdown. Are they not down \nafter 7 seconds, then they will be force killed. \n\n### Stdout/stderr handling\nAll output to stdout/stderr from child-processes will appear in GPM's stdout/stderr, allowing \nfor better log tailing when running in contains, or simply for easier overview.\n\n## Configuration\nGPM attempts to keep the configuration to a minimum, however some configuration is required for \nGPM to be able to figure out what processes should be run. \n\nMake a file `config.json` where you want to run GPM from.\n\nAn extremely simply configuration file, that just runs an echo command once looks like this:\n```json\n[\n  {\n    \"name\": \"echo\",\n    \"command\": \"echo 'this is a test'\"\n  }\n]\n```\n\nHere is a table of all the possible options per process.\n\n|Key|Description|Required|\n|------|-----|------|\n|`name`|This is the name of the process, used when resolving dependencies, and for writing to the log.|Yes|\n|`command`|This is the actual terminal command to run. Write here exactly like you would on your normal terminal. Does not support piping between processes.|Yes|\n|`autoRestart`|Set to true to have the process automatically be restarted when it closes. Mutually exclusive with `after`|No|\n|`after`|The name of the process, **this** process should be run after. Mutually exclusive with `autoRestart`|No|\n|`workDir`|The working directory of the process when executed|No|\n\nA more involved example:\n```json\n[\n  {\n    \"name\": \"echo\",\n    \"command\": \"echo 'this is a test'\"\n  },\n  {\n    \"name\": \"gfs\",\n    \"command\": \"gfs-windows-x64.exe\",\n    \"autoRestart\": true,\n    \"after\": \"echo\"\n  },\n  {\n    \"name\": \"echo2\",\n    \"command\": \"echo 'this is echo 2'\",\n    \"after\": \"echo\"\n  },\n  {\n    \"name\": \"echo3\",\n    \"command\": \"echo this is echo 3\",\n    \"after\": \"echo2\"\n  }\n]\n```\n\nThis starts a single echo process that write `'this is a test'` to the terminal. \nThen it starts a [GFS](https://github.com/zlepper/gfs) process. \nAt the same time another echo process is started, writing `'this is echo 2'` to the terminal.\nThen yet another echo process start, that write `'this is echo 3'` to the terminal.\n\nShould the GFS process ever stop, then GPM will handle starting it again. \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzlepper%2Fgpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzlepper%2Fgpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzlepper%2Fgpm/lists"}