Most daemons and services are designed to be run under some supervisor
program. They will be automatically restarted in case of failure. There
will be reliable signalling ability. And flexible easy to use logging
capabilities.

=> daemontools-like
solutions are advisable.
=> daemontools-encore
is very good option.
=> runit
=> s6
are also perfect choices.
They are cross-platform, easy to compile and has low learning curve.