É importante lembrar que o upstart é um sistema baseado em eventos, não um sistema baseado em dependência.
Portanto, usar "e" pode ser perigoso. Você está pedindo para começar a esperar até que todos esses eventos aconteçam para começar seu trabalho.
Assim, o primeiro tempo da net-device-up IFACE = eth0 é emitido (durante o boot se for um servidor, ou sempre que for plugado se for um laptop e gerenciado pelo NetworkManager), então essa será a primeira condição. Então o upstart esperará até que o apache2 seja parado. Isso nunca será emitido se você estiver usando o script apache2 do sistema, porque ele está em /etc/init.d e não emitirá eventos de início / início / parada / parada.
O que você provavelmente quer é isso:
start on stopping mysql
task
pre-start script
if service apache2 status ; then
exit 0
fi
exec /my/backup/script
end script
Note que a tarefa é importante acima. Ele informa ao iniciante que esse trabalho não é "concluído" até que o script principal seja encerrado. Dessa forma, o evento de parada do mysql será bloqueado neste job até que seja feito. A verificação no apache2 pode não estar certa .. já que não tenho certeza do que você quer fazer se o apache2 ainda estiver rodando quando o mysql estiver parando. Na verdade, os dois eventos não são coordenados e, na verdade, acontecem em paralelo durante o desligamento do sistema, portanto, se você quiser que eles sejam coordenados, provavelmente precisará de outro trabalho inicial que parará / iniciará o apache2. Isso bastaria
start on started mysql
stop on stopping mysql
pre-start exec /etc/init.d/apache2 start
post-stop exec /etc/init.d/apache2 stop
Você também precisa remover os links normais com update-rc.d -f apache2 remove
. Eu sugiro chamar isto de algo como apache2-upstart para que ele não confunda o comando de serviço.