Vou escrever esta resposta a partir de uma perspectiva do FreeBSD, mas ela deve ser aplicável ao Linux e ao Debian ... nomes de pacotes e outras coisas podem mudar.
Eu estava igualmente descontente com o spawn-fcgi. No FreeBSD, ele tem um script rc.d, mas não obedece as regras do rc.d (não pode "reiniciar" por exemplo).
A parte inferior do manual do spawn-fcgi, no entanto, menciona supervisionar. Com alguns pesquisando isso revelou "daemontools" ... No FreeBSD, havia pacotes para daemontools e daemontools-encore. O -encore parecia ser mais novo e possuía mais recursos, então eu escolhi. Minha versão é 1.10_1 do daemontools-encore.
No FreeBSD, um script rc.d é fornecido para o svscan. No FreeBSD isso faz a varredura de / var / service para subdiretórios e executa um "supervisionar" para cada um. Eu aceitei essa configuração padrão e coloque svscan_enable="YES"
em /etc/rc.conf. Para Linux, eu não sei sobre o script rc, mas ele diz que / service é o diretório padrão.
Dentro de / var / service, eu criei o rt-fcgi e dentro do rt-fcgi eu criei o run. "run" contém:
#!/bin/sh
spawn-fcgi -u www -g www -s /tmp/rt.sock -n -- /usr/local/sbin/rt-server.fcgi
Obviamente, no linux, isso precisa ter o usuário e o grupo que você está usando e a localização do seu rt-server.fcgi.
O sistema svscan parece anunciar as últimas linhas de erro em um título de processo. Existem outras opções. O meu parece:
46495 - IJ 0:00.01 /usr/local/bin/readproctitle service errors: ...tory (/var/run/rt44/data/gpg). GnuPG support has been disabled (/usr/local/lib/perl5/site_perl/RT/Config.pm:790)\n[52465] [Tue Mar 7 21:09:54 2017] [warning]: The requested port (443) does NOT match the configured WebPort (80). Perhaps you should Set($WebPort, 443); in RT_SiteConfig.pm, otherwise your internal hyperlinks may be broken. (/usr/local/lib/perl5/site_perl/RT/Interface/Web.pm:1328)\n
... significando que eu não configurei o gnupg corretamente. Parece que você pode procurar por erros e outras coisas, a menos que você configure o log para svscan.
Este é um pouco pesado para um fcgi, mas é enlatado e funciona. Ele lida com o script saindo por qualquer motivo, mas não gerencia um arquivo PID ou o soquete (além de criar o arquivo de soquete).
Devo dizer que estou muito mais enamorado com o padrão WSGI do que essa bagunça.