An interesting pattern I noticed while exploring the deployment process at GitLab was the use of pgrep to perform healthchecks in the Dockerfile or even in Kubernetes (technically you could).

First define a healthcheck file:

#!/bin/bash

set -e

/usr/bin/pgrep -f <process-to-check>

If there is something, the exit code is 0, else it returns exit code 1. That is a pretty nifty trick.

Second, add this line into your Dockerfile:

HEALTHCHECK --interval=30s --timeout=30s --retries=5 CMD /healthcheck

In a kubernetes setting, simply configure your livenessProbe/readinessProbe and you should be good to go.

livenessProbe:
  exec:
    command:
    - /healthcheck
  initialDelaySeconds: 5
  periodSeconds: 5

Is this an overkill? Do we need to healthcheck our workers if the container is going to restarts anyway? You could monitor container or pod restarts and fire alerts on those signals instead. shrugs