Basta adicionar a respawn
-option ao seu job upstart (para mysql ou asterisco).
Você também pode adicionar adicionalmente a respawn limit
-option:
respawn limit COUNT INTERVAL
"Se o trabalho for respawned mais de COUNT vezes em INTERVAL segundos, será considerado como tendo problemas mais profundos e será interrompido."
Por exemplo,
respawn
respawn limit 3 60
Assim, o seu processo será reiniciado automaticamente se ele falhar, mas se ele falhar mais de três vezes em 60 segundos, ele não será mais reiniciado.
Documentação: Cookbook Upstart
Aqui está um exemplo de trabalho de arranque para asterisco, retirado do link
# asterisk
#
# Upstart control file for the Asterisk PBX
#
# To install, rename this file to 'asterisk' and copy it to /etc/event.d/
# On Debian: copy to /etc/init/
#
# To start asterisk manually:
# sudo start asterisk
#
# To stop asterisk manually:
# sudo stop asterisk
#
# Asterisk is started with an "interactive console", though redirected
# to/from /dev/null . The concept of a main console is bad. OTOH, the main
# process should not detach from the console if we work with upstart and
# alike.
#
# The username 'asterisk' is currently hardwired here, and likewise the
# varrundir.
#
description "Asterisk PBX"
#version "1.8"
start on runlevel [2345]
stop on runlevel [!2345]
pre-start script
# Since Ubuntu clears /var/run on reboot, create this before we try to start
if [ ! -d /var/run/asterisk ]; then
mkdir -p asterisk /var/run/asterisk
chown asterisk: /var/run/asterisk
fi
end script
respawn
exec /usr/sbin/asterisk -U asterisk -g -f