upstart node.js não pode salvar arquivos, permissões erradas?

5

Eu tenho meu próprio servidor linode no outro dia e movi um pequeno nodejs / express com o qual eu estava jogando de um linux aws. Tudo funciona muito bem, mas se eu iniciar o aplicativo com o upstart, ele não será executado com as permissões corretas e não poderá gravar arquivos no disco. Eu tentei todos os tipos de variações do script upstart, como root, como meu nome de usuário, www-data e nada funciona. Eu configurei o diretório public do express para o 777, mesmo como teste, mas sem sorte. Eu começo meu trabalho iniciante com sudo start now-images-manager . Quando eu executo ps -ef , recebo a seguinte saída:

root     25150     1  0 11:26 ?        00:00:00 sudo node /home/myusername/sites/now-images-manager/app.js
root     25151 25150  0 11:26 ?        00:00:03 node /home/myusername/sites/now-images-manager/app.js

Aqui está meu script inicial:

#!upstart
description "now-images-manager startup script"
author      "[email protected]"

start on startup
stop on shutdown

script
    export HOME="/root"
    echo $$ > /var/run/now-images-manager.pid
    exec sudo node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.sys.log 2>&1
    # exec sudo -u myusername /usr/bin/node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.sys.log 2>&1
end script

pre-start script
    # Date format same as (new Date()).toISOString() for consistency
    echo "['date -u +%Y-%m-%dT%T.%3NZ'] (sys) Starting" >> /var/log/now-images-manager.sys.log
end script

pre-stop script
    rm /var/run/now-images-manager.pid
    echo "['date -u +%Y-%m-%dT%T.%3NZ'] (sys) Stopping" >> /var/log/now-images-manager.sys.log
end script

Aqui está uma amostra do log:

downloadFileFromURL  { [Error: ENOENT, open 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg']
  errno: 34,
  code: 'ENOENT',
  path: 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg' }

Quando inicio o aplicativo com node app.js no shell, ele funciona perfeitamente bem.

    
por Thomas Traum 24.11.2012 / 13:05

1 resposta

1

Eu encontrei o problema. Se você estiver criando diretórios usando seu aplicativo de nó, primeiro será necessário efetuar o cd no diretório do aplicativo do nó. Então, meu script inicial parece com o seguinte:

script
    export HOME="/var/www"
    cd $HOME/mywebsite/
    exec node index.js  >> /var/log/node.log 2>&1
end script

Você pode testar isso, movendo um diretório e, em seguida, tentando executar o aplicativo do nó. Deve lançar o mesmo erro que o seu script upstart antes das alterações feitas acima.

    
por 25.09.2014 / 11:41