You can add new details here. I can edit top post to link to your post lower in the comments.
Note sure what you mean by delays. Delays between attempts? You can program a manual delay in the “finish” part (finish is a process that always runs after a service dies, either crashed or killed).
We’ve got all the “timeout-*” stuff (timeout-up in ms to start a service before it’s restarted, timeout-down in ms to stop before sending a sigkill etc.). There’s also timeout-finish. By default, finish shouldn’t run more than 5 seconds, but you can increase its timeout and have a sleep 30 or something, in-between restarts and nothing else in the finish script (the idea of finish is that it’s usually used to clean-up after a daemon dies, no matter if it’s killed or crashes, but just like most things in s6, everything is highly customizable).
There’s max-dealth-tally (# of deaths of a service), mostly used for tracking, which might be a way to integrate a max number of deaths before a service is stopped completely. This option is used to throttle restarts of the service apparently (somehow, idk how). There’s a default value of 100 in s6-rc (if you restart your service more than 100 times, something could kick in, but by default, it’s just that s6-supervise will forget about the previous older than 100 restart attempts).
I’m not yet aware of any limited number of try-up before the service is stopped. You have the “once” option in s6-svc to start a service once and if it crashes, it doesn’t attempt to start it again. I’m pretty sure there are ways to implement a max count of starts in s6, before a service is stopped, I didn’t look into that.