O status de saída 127 significa que o comando não foi encontrado. Seu problema é que você está tentando usar uma sub-rotina dentro do bloco de script, então o upstart está tentando executá-lo como um comando, que não existe. Você deve movê-lo acima do bloco de script.
Além disso, como você está usando apenas exec no bloco de script, é possível removê-lo e usar apenas exec
.
#Web app upstart script
description "start and stop web app"
start on (net-device-up
and local-filesystems
and rullevel [2345])
stop on runlevel [016]
respawn
respawn limit 5 30
console output
chdir /home/ec2-user/go/src/github.com/dineshappavoo/web-app/app
exec ./app