Parece que você não entende como as sub-rotinas dos scripts funcionam.
estrofe de pré-início
pre-start script
echo 'Starting myscript Daemon\n'
end script
Este script inicia antes dos seus scripts principais, se falhar, a sequência de inicialização falhará. Isto é normalmente usado para algumas operações ad hoc que permitirão que o primeiro script seja iniciado, elas não são semelhantes a um daemon (continuamente em execução no background). Exemplo:
pre-start script
/lib/init/apparmor-profile-load usr.sbin.avahi-daemon
end script
script
opts="-D"
[ -e "/etc/eucalyptus/avahi-daemon.conf" ] && opts="${opts} -f /etc/eucalyptus/avahi-daemon.conf"
exec avahi-daemon ${opts}
end script
Como você pode ver, o perfil apparmor é carregado pela primeira vez a partir do DBus (sim, meio estranho se você não conhece o backend do Ubuntu) e então inicia o serviço como pretendido. Esta operação é projetada para o processo que é executado uma vez.
roteiro de script
script
exec /foo/bar/myscript-start.sh
end script
Esta é a única parte do seu programa que precisa ser executada continuamente e o upstart deve rastrear seu PID. Este processo morre quando você interrompe o script.
estrofe pós-parada
post-stop script
echo 'and apparently we are done....'
end script
Essas estrofes são projetadas como uma espécie de processo de limpeza. Será executado assim que o roteiro principal morrer graciosamente. Por exemplo, apport:
post-stop script
# Check for a hung resume. If we find one try and grab everything
# we can to aid in its discovery
if [ -e /var/lib/pm-utils/status ]
then
ps -wwef > /var/lib/pm-utils/resume-hang.log
fi
if [ "'dd if=/proc/sys/kernel/core_pattern count=1 bs=1 2>/dev/null'" != "|" ]
then
exit 1
else
echo 0 > /proc/sys/fs/suid_dumpable
echo "core" > /proc/sys/kernel/core_pattern
fi
end script
Ele tenta detectar um reinício do sono que não foi bem-sucedido e inicia os preparativos para detectar o próximo travamento para que ele possa produzir um relatório útil (sim, é complicado novamente, mas esse foi o script mais simples que eu descobri em separado ufw
que é supersimplificado). Como você pode ver, cada processo morre sozinho, pois pode bloquear o desligamento do sistema (em tais casos, há também um script que envia os sinais TERM
e KILL
para o processo suspenso).
Linha de fundo, o que você está experimentando é perfeitamente normal e é o comportamento desejado do iniciante.