Your options are
* Keep trying to restart it forever if it fails (by setting the timeout so low that it'll keep trying)
* Try a set number of restarts, then pass the failure higher up, potentially taking down the whole system if there are enough failures.
* Just let it fail and walk away.
https://www.erlang.org/doc/design_principles/sup_princ.html#...
If you have something like a web site with a database, where 1) the database is critical to the normal functioning of the system, but 2) you still want the site up to let users know that "it's broken and we're fixing it", and maybe also send some alerts out, you might want something more like an exponential backoff or some other more involved strategy, which isn't shipped with Erlang.
In fact, I am writing this week a dynamic process pool in Elixir which is so peculiar in its requirements I don't think I've ever seen anywhere, and it's in total 500 lines of code spread over 2 GenServers (+ Registry and DynamicSupervisor). I reckon it would easily be 25x as much in C++ or Rust.
If you want exponential backoff, I suppose it should be pretty easy to implement with a custom Supervisor (though the best practice would be to have a sidecar GenServer to deal with the backoff/alerting business rules, and using a regular Supervisor.)
Back in the day, I found this to be a pretty good 'circuit breaker' type of thing: https://github.com/jlouis/fuse
I wrote something similar for the (OTP) application level: https://github.com/davidw/hardcore
I find that is often a lot more relatable to average-joe-tasks than bigger picture distributed ideas, even if they're actually the same thing at their heart.
I just don't want one request to blow out the system, or some sporadically turned remote API to hose everything, Elixir gives me that (with the simplicity other languages often need other stuff stuck onto to handle).