F1bonacc1 / process-compose

Process Compose is a simple and flexible scheduler and orchestrator to manage non-containerized applications.
https://f1bonacc1.github.io/process-compose/
Apache License 2.0
1.34k stars 52 forks source link

Startup Probes #217

Closed nyarly closed 3 months ago

nyarly commented 3 months ago

Feature Request

The health probes in the documentation talks about startup probes (maybe copypasta from Kubernetes docs?), but there doesn't seem to be support for this in the configuration.

It would be great if there were K8s inspired startup probes - before liveness or readiness start, a startup probe runs until it succeeds.

Use Case:

I'm running a local postgres instance behind my backend, and I want the backend to wait for postgres to complete starting because otherwise it just dies and has to be restarted manually. Right now, I'm using a liveness check for postgres, but that means I get a DB log entry every 10 seconds that adds noise when debugging.

I would also like to speed up the start of my development setup, so I'd like there to be a check every second for postgres to be up - but at present that would significantly increase log noise.

Proposed Change:

Mirror the K8s change that added startupProbe - if defined, start the service and start running the startup_probe. When it succeeds, if a liveness probe is defined, start that (or else just mark the process as healthy).

Who Benefits From The Change(s)?

Developers with depends_on configurations

Alternative Approaches

Do nothing, live with junk in the logs, unless a probe that doesn't cause logging can be found.

nyarly commented 3 months ago

Related: it's unclear what ready_probe does - process-compose doesn't have load balancing, or manage networking, so it's not like load gets shifted if a process is unready. Based on behavior, I guess liveness implies healthy for depends_on and service restarting. Perhaps drop ready_probe and and add health_probe as a synonym for liveness?

F1bonacc1 commented 3 months ago

Hi @nyarly,

Have you considered using condition.process_log_ready? See more here.

nyarly commented 3 months ago

That might suit my present need really well actually