Primeiro, seu problema parece ser o rastreamento inadequado de garfo. Para resolver esse problema, vou fazer alguns ajustes na configuração do seu upstart:
- Primeiro, risque o uso de su para alterar o usuário. su não deve ser usado para daemons, apenas usuários regulares (pode causar problemas com pam sendo acionado), e (mais relevante) ele bifurca o processo em segundo plano (mais difícil para Upstart rastrear e matar seu daemon). Usaremos
setuid vagrant
na configuração do upstart. -
O próximo problema é que sempre forks o processo para o plano de fundo e se bifurca em segundo plano. Isso deixa o Upstart rastreando algum pid aleatório que provavelmente não está mais vivo. A solução é usar o recurso de reabertura automática do Upstart. Vou demonstrar pelo exemplo abaixo.
description "server.js" start on vagrant-mounted stop on runlevel [016] chdir /vagrant/server setuid vagrant respawn respawn limit unlimited exec server.js
Note que você não precisa verificar se / vagrant / server é um diretório porque o upstart o cria automaticamente por causa da sub-rotina chdir.