Eu quero manter um aplicativo nodejs rodando, então eu segui isso: link e instalei o Monit e o Upstart, que tem funcionado perfeitamente por alguns meses. Acabei de adicionar um recurso ao meu aplicativo que permite gravações em disco e estou recebendo erros de permissão. Eu fui procurar por tudo porque parecia que os erros de permissão não deveriam ser o problema. Acontece que o usuário que eu inicio com o Upstart não é realmente o usuário que está executando o aplicativo!
Quando eu corro:
sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js
Seja via Monit / Upstart, ou apenas via SSH, ele cria 2 processos. De ps ax
:
2869 ? Ss 0:00 sudo -u deploy node /srv/www/[name of my app]/dist/app.js
2878 ? Sl 0:01 node /srv/www/[name of my app]/dist/app.js
Quando faço login como o usuário deploy
e apenas executo:
NODE_ENV=production node /srv/www/[name of my app]/dist/app.js
Existe apenas 1 processo!
3131 pts/1 Sl+ 0:04 node /srv/www/[name of my app]/dist/app.js
Esse problema é que, por algum motivo, o segundo processo não tem as permissões corretas para escrever e parece ser o responsável pelo trabalho. Tudo está perfeito quando eu não uso o Upstart, incluindo as gravações, mas eu preciso do Upstart / Monit para manter meu aplicativo nodejs rodando.
Qual é a melhor maneira de configurar o Monit / Upstart neste caso, então? Quero manter permissões baixas (por isso, o usuário deploy
que não tem sudo) e quero que o aplicativo seja iniciado quando ele falhar.
Este é o meu script Upstart:
start on startup
stop on shutdown
script
export HOME="/home/deploy"
echo $$ > /var/run/[name of my app].pid
exec sudo -u deploy NODE_ENV=production node /srv/www/[name of my app]/dist/app.js >> /srv/www/log/[name of my app].sys.log 2>&1
end script
Algo errado aí?
O tutorial diz para usar sudo -u user ...
para executá-lo como usuário desejado. Mas isso é o que está causando o problema.
Obrigado!
Paul