Usar o chdir
dentro da cláusula script
está totalmente errado, e isso significa que você não consegue entender uma idéia muito básica no início (sem ofensa significava). (Como uma nota lateral, a palavra-chave exec
é apenas inútil, mas não causa nenhum dano).
Existe uma ideia muito central para entender como funciona o upstart. O Upstart tenta determinar qual processo dos processos gerados pela sub-rotina script
é o daemon real desse serviço. Em seguida, ele usa esse processo para determinar se esse trabalho está em execução ou interrompido ou com falha ou o que for. Por esse motivo, é de suma importância garantir que o processo esteja correto.
O algoritmo para determinar o processo é muito simples, depende da estrofe expect
. expect fork
significa "pegue a segunda bifurcação na sub-rotina script
", expect daemon
- mesmo, mas a terceira.
Agora, usar chdir
dentro de script
significa que ele chama o binário real /bin/chdir
e isso conta como uma bifurcação separada. O que você precisa fazer é movê-lo para fora da sub-rotina script
e então jogar com a sub-rotina expect
até acertar. Você pode verificar se acertou comparando a saída de initctl status celery
com ps
. Os PIDs devem corresponder.