Este é um bom começo, mas há algumas coisas que você pode ter entendido mal sobre upstart aqui:
start on started
O evento iniciado é emitido toda vez que qualquer trabalho no sistema é iniciado. Você provavelmente pretendia ter algo mais depois de iniciado, como start on started networking
. Isso seria incorreto também, infelizmente, já que o trabalho em rede não é tão significativo quanto o seu nome implicaria. Para o memcached, ele pode ser executado praticamente a qualquer momento depois que o nível de execução 2 for atingido. Então
start on runlevel [2345]
Funciona e é necessário devido à sua parada na regra:
stop on runlevel [!2345]
Eu sei que é um pouco confuso, mas você realmente tem que usar '^' ao invés de '!' aqui, então você quer
stop on runlevel [^2345]
Também vale notar que isso irá parar no nível de execução 1, que é o "modo de manutenção de usuário único". Mas seu início original não iniciaria o backup no nível de execução 2. Isso seria um erro, portanto, certifique-se de que os níveis de execução sejam respeitados corretamente.
Seu pós-stop e exec ignoram o fato de que o upstart tentará rastrear esse pid, mas como o script start-memcached sai (porque ele permite que o memcached se autodesenha) o pid será perdido. Isso significa que o arrivista não pode reaparecer, porque não está ciente do pid em primeiro lugar e não sabe que ele morreu.
Se você quiser que ele seja recuperado, provavelmente você deseja:
expect daemon
exec $DAEMONBOOTSTRAP
Não há necessidade de usar start-stop-daemon nesta instância. O Upstart irá acompanhar o pid e quando você 'parar o memcached' ele irá enviar um SIGTERM. Além disso, o arquivo de configuração do memcached já roda o memcached como um usuário diferente de root (memcache na verdade) no Ubuntu 10.10 e posterior, então você provavelmente não precisa se preocupar em mudar o userid também.