Costumava ser o caso de você poder fazer uma chamada para cada um desses scripts em uma entrada de 'respawn' na parte inferior do / etc / inittab, e acabar com isso. Simples. Mas desde que o Debian passou a usar o upstart ao invés do init, e o inittab obsoleto, as coisas ficaram mais complicadas e frágeis. Você precisará escrever um arquivo de configuração inicial; aqueles que entram em / etc / init, e são mais fáceis de errar.
O que você pode fazer é através do conteúdo de / etc / init / * procurando por configurações existentes que usam a palavra-chave respawn, e que iniciam algum daemon de rede - estas devem ter dependências declaradas que asseguram que a rede esteja já em cima. Copie e modifique um desses para cada um dos seus túneis. A convenção é colocar suas próprias configurações em / etc / init / local / *. Você pode ser capaz de remover parte da fragilidade iniciando seus túneis mais cedo durante a inicialização e apenas permitindo que eles sejam interrompidos, interrompidos, expirados ou o que quer que seja, quando a rede ainda não estiver ativada. O "respawn" irá eventualmente reanimá-los, possivelmente após um intervalo mais longo, se eles tentarem novamente várias vezes antes.
Desde que você esteja usando o 'respawn', você está relativamente a salvo de interromper o processo de inicialização - mas com o upstart, tudo é possível; sua maior flexibilidade significa que os erros de configuração podem travar a inicialização de maneiras menos óbvias; inspeção visual não é mais tão confiável quanto era com o inittab.
A propósito, você provavelmente não precisa desses scripts 'while true'. Eu costumo usar 'autossh' para iniciar e gerenciar esses tipos de túneis. Ele tende a ser mais confiável do que um script típico, e o comando autossh pode ser colocado diretamente em um arquivo de configuração / etc / init.
Hesito em fornecer um exemplo de arquivo de configuração, porque as configurações de inicialização podem ser diferentes o suficiente para que o que funciona para mim não funcione para você (mais do que isso). Mas aqui está uma das minhas configurações de autossh - isso pode entrar, digamos, em /etc/init/local/autossh-example.conf. Você notará que eu não estou declarando explicitamente qualquer dependência em qualquer configuração de rede - estou esperando que o 'respawn' cause novas tentativas até que a rede esteja lá. Você vai querer testar isso localmente em uma máquina idêntica antes de confiar em sua máquina remota:
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]
respawn
exec /usr/bin/autossh -R 20042:127.0.0.1:22 -N foo.example.com